#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)