Фильтр Woocommerce add_filter ('woocommerce_product_get_price') не применяется при вызове ajax - PullRequest
0 голосов
/ 21 февраля 2020

Я использую плагин Role Based Pricing for 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).

проверяется, загружены ли плагины, но не может найти причину этого Я думаю, по какой-то причине фильтр не был применен?

1 Ответ

0 голосов
/ 21 февраля 2020

Ваша проблема здесь, скорее всего, связана с обработкой параметров. Если это вызов 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...