【问题标题】:Woocommerce filter add_filter('woocommerce_product_get_price') doesn't apply via ajax callWoocommerce 过滤器 add_filter('woocommerce_product_get_price') 不适用于通过 ajax 调用
【发布时间】:2020-02-21 15:56:33
【问题描述】:

我正在使用 WooCommerce 插件基于角色的定价来根据用户角色获取价格变化。

当我调用函数来获取产品时,过滤器会正确应用,但是当我通过 ajax 调用函数时,它总是给出默认价格值。

function get_products_from_category($quantity=12,$page=1,$cat=[]){

  $desiredPost = queryToGetProductsAccordingTofilters($quantity,$page,$cat);
  $list = [];
  foreach ($desiredPost as $key => $value) {
    $myproduct = wc_get_product($value->ID);
    $list[] = [
      (...)
      'price' => $myproduct->get_price().get_woocommerce_currency_symbol(),
    ];
  }
  return $list;
}

如果我在存档产品、页眉、页脚中正常调用该函数,则始终使用过滤器价格,通过 ajax 返回正常值。

已经尝试在函数内部强制加载插件

require_once WP_PLUGIN_DIR . '/role-based-pricing-for-woocommerce/addify_role_based_pricing.php';

函数被调用:

add_action('wp_ajax_my_getshopproducts', 'my_getshopproducts'); add_action('wp_ajax_nopriv_my_getshopproducts', 'my_getshopproducts'); function my_getshopproducts(){ 
//get values from POST, $quantity,$page,$cat
$values = get_products_from_category($quantity,$page,$cat);
echo $json_encode($values);
}

再次,如果我打电话给

get_products_from_category($quantity,$page,$cat)

直接给出正确的价格,而不是来自 ajax 调用(正在应用 add_filter)。

检查了插件是否已加载但找不到发生这种情况的原因,我猜由于某种原因未应用过滤器?

【问题讨论】:

    标签: php ajax wordpress woocommerce


    【解决方案1】:

    您的问题很可能与处理参数的方式有关。如果是 ajax 调用,则需要以不同方式捕获 $cat 变量。

    你没有发布你的 JS,但我假设它看起来像这样:

    jQuery.ajax({
            type: 'post',
            url: myAjax.ajaxurl,
            data: {
              action: 'get_products_from_category',
              quantity: quantity,
              page: page,
              cat: cat
    
            },
            success: function (response) {
            //Do Stuff
            },
            error: function (errorThrown) {
              console.log(errorThrown);
            }
          });
    

    在这种情况下,您需要从 $_POST 获取变量。

    function get_products_from_category($quantity=12,$page=1,$cat=[]){
    
      if(wp_doing_ajax()){
         if(isset($_POST['quantity'])){
            $quantity = $_POST['quantity']; 
         }
         if(isset($_POST['page'])){
            $page = $_POST['page']; 
         }
         if(isset($_POST['cat'])){
            $cat = $_POST['cat']; 
         }
      }
    
      $desiredPost = queryToGetProductsAccordingTofilters($quantity,$page,$cat);
      $list = [];
      foreach ($desiredPost as $key => $value) {
        $myproduct = wc_get_product($value->ID);
        $list[] = [
          (...)
          'price' => $myproduct->get_price().get_woocommerce_currency_symbol(),
        ];
      }
      return $list;
    }
    

    【讨论】:

    • 我的问题是没有从帖子中获取变量,我正确获取它们,问题是从 ajax 调用调用时未应用价格过滤器。该函数是从 ajax 操作中调用的。 add_action('wp_ajax_my_getshopproducts', 'my_getshopproducts'); add_action('wp_ajax_nopriv_my_getshopproducts', 'my_getshopproducts'); function my_getshopproducts(){ //从 POST 获取值 //调用 get_products_from_category }
    • 您需要发布有关您如何尝试使用 ajax 调用的相关代码。
    • 这与我的问题无关...... ajax 调用工作正常,未应用 add_filter。但我会添加它。
    猜你喜欢
    • 2020-08-21
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 2019-06-17
    • 2014-03-11
    • 2021-07-07
    • 2017-10-06
    相关资源
    最近更新 更多