Сортировка цен Woocommerce не работает

Практически все руководства по реализации сортировки цен на сайте woocommerce одинаковы. Я пробовал два основных способа. 1-й - подключил аргументы моего запроса из functions.php следующим образом:

add_filter('woocommerce_get_catalog_ordering_args', 'my_custom_woocommerce_catalog_orderby');

function my_custom_woocommerce_catalog_orderby( $args ) {
    if (isset($_GET['sort'])){
      if ($_GET['sort_by'] == 'by_rating'){        
        $args['meta_key'] = '_wc_average_rating';
      } else if ($_GET['sort_by'] == 'by_price') {
        $args['meta_key'] = '_price';
      }
      $args['orderby']  = 'meta_value_num';
      $args['order'] = strtoupper($_GET['sort']);  
    }
    return $args;
} 

var_dump показывает, что он был пойман:

array(3) { ["orderby"]=> string(14) "meta_value_num" ["order"]=> string(4) "DESC" ["meta_key"]=> string(6) "_price" }

Но товары по-прежнему сортируются по умолчанию в woocommerce (цена, по возрастанию).

Затем я реализовал свой плагин фильтра (который работает очень хорошо) и попытался добавить к нему этот запрос сортировки.

class My_blah_blah_filter {
  public static $instance;
  public $productquery;
  public static function init() {
    if ( is_null( self::$instance ) ) {
      self::$instance = new My_blah_blah_filter ();
    }
    return self::$instance;
  }
  private function __construct() {
    add_action( 'woocommerce_product_query', [ $this, 'filter_by_current_range' ] );
  }

  public function filter_by_current_range( $query ) {

    $this->productquery = $query;
    $query->set('tax_query', $this->get_tax_query());

    if (isset($_GET['sort'])){
      if ($_GET['sort_by'] == 'by_rating'){
        $query->set('meta_key', '_wc_average_rating');
      } else if ($_GET['sort_by'] == 'by_price') {
        $query->set('meta_key', '_price');
      } else {
        $query->set('meta_key', '_price');
      }
      $query->set('orderby', 'meta_value_num');
      $query->set('order', strtoupper($_GET['sort']));  
    }
  }

  public function get_tax_query() {

    // pa_space-overall
    $tax_query = [];
    if ( isset( $_GET['max_so'] ) && isset( $_GET['min_so'] ) ) {
      $terms = get_terms([
        'taxonomy' => 'pa_space-overall',
      ]);
      $rlt = [];
      foreach( $terms as $term ) {
        if ( (int) $term->name <= (int) $_GET['max_so'] && (int) $term->name >= (int) $_GET['min_so'] ) {
          $rlt[] = $term->term_id;
        }
      }

      $tax_query = [
        'relation' => 'AND',
        [
          'taxonomy' => 'pa_space-overall',
          'terms' => $rlt,
          'operator' => 'IN',
        ],
      ];
    }
    if ( isset( $this->productquery->tax_query ) ) {
      $tax_query = array_merge( $this->productquery->query_vars['tax_query'], $tax_query );
    }

    return $tax_query;
}

Некоторые вещи здесь жестко запрограммированы, но это не так, это работает. Но не заказ. Он все еще отслеживается, добавляется в запрос, но в любом случае порядок по умолчанию (цена, возрастание - из настроек woocommerce) Единственный плагин, кроме woocommerce - это расширенные настраиваемые поля, которые тут ни при чем.

Не могу найти решения где-нибудь еще. Какие-либо предложения? Заранее спасибо. Извините за плохой английский или не идеально отформатированный код

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
578
0

Другие вопросы по теме