【问题标题】:Passing php variable in ajax call to add_filter在ajax调用中将php变量传递给add_filter
【发布时间】:2020-09-27 17:33:10
【问题描述】:

我正在尝试将我在 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 调用只接受一个输入字段值。我需要将值传递给过滤器。

我已经花了几个小时,但没有运气:(任何帮助将不胜感激!

【问题讨论】:

  • 您确定第二个过滤器在您添加过滤器后运行,因为我相信您可能在它运行后添加过滤器。
  • 过滤器函数有自己的作用域,所以它不会知道$amount是什么。您可以在返回之前使用global $amount,但您需要确保存在这样的全局变量。我建议您将$amount 存储在可以访问的地方,然后在过滤器中检索它。

标签: php ajax wordpress variables add-filter


【解决方案1】:

问题在于 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
   };
}

【讨论】:

  • 我尝试使用这种方法,但过滤器中的会话始终为空。
  • 这是 woocommerce 吗?
猜你喜欢
  • 1970-01-01
  • 2014-04-23
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多