Изменение WP_Query для упорядочения по total_sales meta_key

#wordpress #woocommerce

#wordpress #woocommerce

Вопрос:

Я пытаюсь обновить сортировку результатов поиска в wordpress / woocommerce

итак, когда есть поиск как: mydomain.com/?s=casesamp;post_type=product

Результаты сортируются по мета_ключу ‘total_sale’

У меня есть следующий хук

 function sv_update_default_search_to_sales( $query ){
    // check if the user is requesting an admin page
    // or current query is not the main query
    if ( is_admin() || ! $query->is_main_query() ){
        return;
    }

    // Query Update for Search Results pages with products
    if (is_search() amp;amp; is_woocommerce() ){

        if(get_query_var('post_type') != 'product'){
            return;
        }

        $orderBy = get_query_var('orderby');

        if(empty($orderBy) || $orderBy == 'relevance'){
            $query->set('orderby', 'meta_value_num');
            $query->set('order', 'desc');
            $query->set('meta_key', 'total_sales');
            $query->set('meta_type', 'NUMERIC');
        }
    }
}

add_action( 'pre_get_posts', 'sv_update_default_search_to_sales', 1 );
  

Когда я вывожу $wp_query после того, как запрос был проанализирован, я вижу, что для ‘meta_key’ установлено значение пусто.

  [meta_key] => 
 [orderby] => meta_value_num
 [order] => DESC
 [meta_type] => NUMERIC
  

Я видел в других примерах кодов, где они устанавливают meta_key и meta_value для сопоставления; однако у меня нет установленного значения, мне нужно упорядочить результаты по мета-ключу ‘total_sales’.

Я в основном пытаюсь воссоздать этот тип запроса:

 $query = new WP_Query([
    'post_type' => 'product',
    'meta_key' => 'total_sales',
    'orderby' => 'meta_value_num'
]);
  

Ответ №1:

Хорошо, итак, после дальнейшей отладки. Я понял, что были другие плагины, изменяющие запрос, которые были запущены после моего действия.

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

 global $wp_filter;

echo '<pre>';
   print_r($wp_filter['pre_get_posts']);
echo '</pre>';
  

Выяснил номер действия: 90000 было последним подключенным действием, поэтому я установил mines на 90001

 add_action( 'pre_get_posts', 'sv_update_default_search_to_sales', 900001 );
  

и это сработало! x)