wordpress - 将 WP_Query 修改为按 total_sales 元键排序
问题描述
我正在尝试更新 wordpress / woocommerce 中搜索结果的排序
因此,当搜索为: mydomain.com/?s=cases&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() && 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'
]);
解决方案
OK,所以经过进一步调试。我意识到还有其他插件修改了我的操作后设置为触发的查询。
我不知道具体是哪个插件在修改它,但是在呈现页面后,我打印了过滤器
global $wp_filter;
echo '<pre>';
print_r($wp_filter['pre_get_posts']);
echo '</pre>';
找出动作编号: 90000 是最后一个被钩住的动作,所以我将地雷设置为 90001
add_action( 'pre_get_posts', 'sv_update_default_search_to_sales', 900001 );
它奏效了!X)
推荐阅读
- django - Django REST Serializer 使用错误的模型进行序列化
- python - python文件写入程序运行时如何更新桌面上的文件大小
- javascript - 使用 d3.js 更新表数据
- c# - C#捕获从不在进程中的函数返回的异常?
- r - 如何设置仅在输入 3 时才显示集合向量的函数?
- javascript - 如果 URI 没有改变,例如在单页应用程序上,如何检测用户是否在新页面上?
- angular - Angular Kendo UI 全局访问
- php - 内连接循环通过
- git - 如何 git rebase 从另一个分支直接到 master 分支?
- javascript - 受控数字比例映射