在ajax调用add_filter时传递php变量。

问题描述 投票:0回答:1

我试图将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调用只是简单地获取一个输入字段的值。而我需要把这个值传递给过滤器。

我已经花了几个小时的时间在这上面,但是没有任何进展 :( 任何帮助都将是非常感激的!

php ajax wordpress variables add-filter
1个回答
0
投票

问题是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
   };
}
© www.soinside.com 2019 - 2024. All rights reserved.