我试图将ajax调用中收到的一个变量传递给add_filter函数。
以下是我的代码
add_action('wp_ajax_mht_set_partial_payment_amount', 'mht_set_partial_payment_amount');
add_action('wp_ajax_nopriv_mht_set_partial_payment_amount', 'mht_set_partial_payment_amount');
function mht_set_partial_payment_amount(){
$amount = $_POST["partial_payment_amount"];
add_filter('woo_wallet_partial_payment_amount', function($partial_payment){
return $amount;
}, 10, 1);
echo json_encode($amount);
die();
}
$amount在响应中完全正常,但在过滤器中却完全不起作用。
我试过很多其他的方法来传递$amount变量到过滤器中(使用一个类或全局变量),但是没有任何效果。
ajax调用只是简单地获取一个输入字段的值。而我需要把这个值传递给过滤器。
我已经花了几个小时的时间在这上面,但是没有任何进展 :( 任何帮助都将是非常感激的!
问题是AJAX函数与用户页面分开运行。所以我想,当你添加过滤器时,它永远不会执行,因为它是一个AJAX调用,而不是建立页面。我会做一个$_SESSION变量来临时存储该值,并在钩子中使用它,比如。
function mht_set_partial_payment_amount(){
if (!empty($_POST["partial_payment_amount"]) {
$_SESSION['my-amount"] = $_POST["partial_payment_amount"];
echo json_encode($amount);
}
wp_die(); // Use wp_die for ajax functions.
}
总是添加过滤器来执行调用, 但里面的代码只有在$_SESSION变量存在的情况下才会被执行:
add_filter('woo_wallet_partial_payment_amount', function($partial_payment){
if (!empty($_SESSION["my-amount"]) {
//EXECUTE WHAT YOU WANT
};
}