Wordpress - 编辑插件的过滤器功能
Wordpress - Editing a plugin's filter functionality
我想知道是否有人可以帮助我。
我有一个名为付费会员专业版的插件。
在注册表单上有一些我想必填的字段。
我查看了代码,找到了设置哪些字段是必填项和哪些字段不是必填项的地方,如下所示:
//require fields
$pmpro_required_billing_fields = array(
"bfirstname" => $bfirstname,
"blastname" => $blastname,
"baddress1" => $baddress1,
"bcity" => $bcity,
"bstate" => $bstate,
"bzipcode" => $bzipcode,
"bphone" => $bphone,
"bcountry" => $bcountry,
"bemail" => $bemail,
"CardType" => $CardType,
"AccountNumber" => $AccountNumber,
"ExpirationMonth" => $ExpirationMonth,
"ExpirationYear" => $ExpirationYear,
"CVV" => $CVV
);
$pmpro_required_billing_fields = apply_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields);
$pmpro_required_user_fields = array(
"username" => $username,
"password" => $password,
"password2" => $password2,
"bemail" => $bemail,
"bconfirmemail" => $bconfirmemail
);
$pmpro_required_user_fields = apply_filters("pmpro_required_user_fields", $pmpro_required_user_fields);
这是在插件核心文件之一中找到的 plugins/paid-memberships-pro/preheaders/checkout。php
我希望能够覆盖它,但我不想编辑核心文件,有没有办法通过我的主题 functions.php 文件编辑它?
例如,将 bfirstname 和 blastname 添加到 $pmpro_required_user_fields?
任何帮助将不胜感激,我一直在寻找如何做到这一点,但我真的无法理解它是否可行。
谢谢大家:)
(将此代码放入您的 chid 主题 function.php 文件)
不确定,但您可以先尝试使用 remove_filters
:
remove_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields);
remove_filters("pmpro_required_billing_fields", $pmpro_required_user_fields);
然后您可以克隆这些数组,自定义它们(并稍微更改它们的名称),然后为自定义数组重新应用过滤器:
$pmpro_required_billing_fields2 = array(
/* your custom code goes here */
);
$pmpro_required_billing_fields2 = apply_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields2);
$pmpro_required_user_fields2 = array(
/* your custom code goes here */
);
$pmpro_required_user_fields2 = apply_filters("pmpro_required_user_fields", $pmpro_required_user_fields2);
这只是一个未经验证的想法,希望它能奏效。
我找到了一些完美运行的代码
//make sure address fields are required
function my_pmpro_required_user_fields($fields)
{
global $bfirstname, $blastname, $baddress1, $bcity, $bstate, $bzipcode, $bcountry, $bphone, $bemail;
$fields["bfirstname"] = $bfirstname;
$fields["blastname"] = $blastname;
$fields["baddress1"] = $baddress1;
$fields["bcity"] = $bcity;
$fields["bstate"] = $bstate;
$fields["bzipcode"] = $bzipcode;
$fields["bphone"] = $bphone;
$fields["bemail"] = $bemail;
$fields["bcountry"] = $bcountry;
return $fields;
}
add_action("pmpro_required_user_fields", "my_pmpro_required_user_fields");
/*
* Save billing fields when using PayPal
*/
function my_pmpro_paypalexpress_session_vars() {
$_SESSION['bfirstname'] = $_REQUEST['bfirstname'];
$_SESSION['blastname'] = $_REQUEST['blastname'];
$_SESSION['baddress1'] = $_REQUEST['baddress1'];
$_SESSION['baddress2'] = $_REQUEST['baddress2'];
$_SESSION['bcity'] = $_REQUEST['bcity'];
$_SESSION['bstate'] = $_REQUEST['bstate'];
$_SESSION['bzipcode'] = $_REQUEST['bzipcode'];
$_SESSION['bphone'] = $_REQUEST['bphone'];
$_SESSION['bemail'] = $_REQUEST['bemail'];
$_SESSION['bcountry'] = $_REQUEST['bcountry'];
}
add_action('pmpro_paypalexpress_session_vars', 'my_pmpro_paypalexpress_session_vars');
//load vars back into $_REQUEST
function my_init() {
if(!empty($_REQUEST['review']) && !empty($_REQUEST['token'])) {
$_REQUEST['bfirstname'] = $_SESSION['bfirstname'];
$_REQUEST['blastname'] = $_SESSION['blastname'];
$_REQUEST['baddress1'] = $_SESSION['baddress1'];
$_REQUEST['baddress2'] = $_SESSION['baddress2'];
$_REQUEST['bcity'] = $_SESSION['bcity'];
$_REQUEST['bstate'] = $_SESSION['bstate'];
$_REQUEST['bzipcode'] = $_SESSION['bzipcode'];
$_REQUEST['bphone'] = $_SESSION['bphone'];
$_REQUEST['bemail'] = $_SESSION['bemail'];
$_REQUEST['bcountry'] = $_SESSION['bcountry'];
}
}
add_action('init', 'my_init');
如果有人仍然需要这个 - 在这种情况下,最佳做法是使用 pmpro_required_user_fields
或 pmpro_required_billing_fields
过滤器,具体取决于您要将哪些字段设为必填 - 用户或账单字段。
因此,例如,如果您需要一个帐单 phone (bphone
) 字段,则可以这样做:
add_filter( "pmpro_required_billing_fields", 'yourtheme_require_phone' );
function yourtheme_require_phone($pmpro_required_user_fields) {
global $bphone;
$pmpro_required_user_fields["bphone"] = $bphone;
return $pmpro_required_user_fields;
}
我想知道是否有人可以帮助我。
我有一个名为付费会员专业版的插件。
在注册表单上有一些我想必填的字段。
我查看了代码,找到了设置哪些字段是必填项和哪些字段不是必填项的地方,如下所示:
//require fields
$pmpro_required_billing_fields = array(
"bfirstname" => $bfirstname,
"blastname" => $blastname,
"baddress1" => $baddress1,
"bcity" => $bcity,
"bstate" => $bstate,
"bzipcode" => $bzipcode,
"bphone" => $bphone,
"bcountry" => $bcountry,
"bemail" => $bemail,
"CardType" => $CardType,
"AccountNumber" => $AccountNumber,
"ExpirationMonth" => $ExpirationMonth,
"ExpirationYear" => $ExpirationYear,
"CVV" => $CVV
);
$pmpro_required_billing_fields = apply_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields);
$pmpro_required_user_fields = array(
"username" => $username,
"password" => $password,
"password2" => $password2,
"bemail" => $bemail,
"bconfirmemail" => $bconfirmemail
);
$pmpro_required_user_fields = apply_filters("pmpro_required_user_fields", $pmpro_required_user_fields);
这是在插件核心文件之一中找到的 plugins/paid-memberships-pro/preheaders/checkout。php
我希望能够覆盖它,但我不想编辑核心文件,有没有办法通过我的主题 functions.php 文件编辑它?
例如,将 bfirstname 和 blastname 添加到 $pmpro_required_user_fields?
任何帮助将不胜感激,我一直在寻找如何做到这一点,但我真的无法理解它是否可行。
谢谢大家:)
(将此代码放入您的 chid 主题 function.php 文件)
不确定,但您可以先尝试使用 remove_filters
:
remove_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields);
remove_filters("pmpro_required_billing_fields", $pmpro_required_user_fields);
然后您可以克隆这些数组,自定义它们(并稍微更改它们的名称),然后为自定义数组重新应用过滤器:
$pmpro_required_billing_fields2 = array(
/* your custom code goes here */
);
$pmpro_required_billing_fields2 = apply_filters("pmpro_required_billing_fields", $pmpro_required_billing_fields2);
$pmpro_required_user_fields2 = array(
/* your custom code goes here */
);
$pmpro_required_user_fields2 = apply_filters("pmpro_required_user_fields", $pmpro_required_user_fields2);
这只是一个未经验证的想法,希望它能奏效。
我找到了一些完美运行的代码
//make sure address fields are required
function my_pmpro_required_user_fields($fields)
{
global $bfirstname, $blastname, $baddress1, $bcity, $bstate, $bzipcode, $bcountry, $bphone, $bemail;
$fields["bfirstname"] = $bfirstname;
$fields["blastname"] = $blastname;
$fields["baddress1"] = $baddress1;
$fields["bcity"] = $bcity;
$fields["bstate"] = $bstate;
$fields["bzipcode"] = $bzipcode;
$fields["bphone"] = $bphone;
$fields["bemail"] = $bemail;
$fields["bcountry"] = $bcountry;
return $fields;
}
add_action("pmpro_required_user_fields", "my_pmpro_required_user_fields");
/*
* Save billing fields when using PayPal
*/
function my_pmpro_paypalexpress_session_vars() {
$_SESSION['bfirstname'] = $_REQUEST['bfirstname'];
$_SESSION['blastname'] = $_REQUEST['blastname'];
$_SESSION['baddress1'] = $_REQUEST['baddress1'];
$_SESSION['baddress2'] = $_REQUEST['baddress2'];
$_SESSION['bcity'] = $_REQUEST['bcity'];
$_SESSION['bstate'] = $_REQUEST['bstate'];
$_SESSION['bzipcode'] = $_REQUEST['bzipcode'];
$_SESSION['bphone'] = $_REQUEST['bphone'];
$_SESSION['bemail'] = $_REQUEST['bemail'];
$_SESSION['bcountry'] = $_REQUEST['bcountry'];
}
add_action('pmpro_paypalexpress_session_vars', 'my_pmpro_paypalexpress_session_vars');
//load vars back into $_REQUEST
function my_init() {
if(!empty($_REQUEST['review']) && !empty($_REQUEST['token'])) {
$_REQUEST['bfirstname'] = $_SESSION['bfirstname'];
$_REQUEST['blastname'] = $_SESSION['blastname'];
$_REQUEST['baddress1'] = $_SESSION['baddress1'];
$_REQUEST['baddress2'] = $_SESSION['baddress2'];
$_REQUEST['bcity'] = $_SESSION['bcity'];
$_REQUEST['bstate'] = $_SESSION['bstate'];
$_REQUEST['bzipcode'] = $_SESSION['bzipcode'];
$_REQUEST['bphone'] = $_SESSION['bphone'];
$_REQUEST['bemail'] = $_SESSION['bemail'];
$_REQUEST['bcountry'] = $_SESSION['bcountry'];
}
}
add_action('init', 'my_init');
如果有人仍然需要这个 - 在这种情况下,最佳做法是使用 pmpro_required_user_fields
或 pmpro_required_billing_fields
过滤器,具体取决于您要将哪些字段设为必填 - 用户或账单字段。
因此,例如,如果您需要一个帐单 phone (bphone
) 字段,则可以这样做:
add_filter( "pmpro_required_billing_fields", 'yourtheme_require_phone' );
function yourtheme_require_phone($pmpro_required_user_fields) {
global $bphone;
$pmpro_required_user_fields["bphone"] = $bphone;
return $pmpro_required_user_fields;
}