在与其他人进行了大量的谷歌搜索和头脑风暴后,我发现我可能已经把这件事复杂化了。我的印象是我不能使用pre_get_posts
搜索结果时挂钩。事实证明,我可以。我使用一个元查询来检查post元是否存在。我还包括了一些检查,以防止函数在不是主查询、是管理或不是搜索时运行。
以下是对我有效的方法:
add_filter( \'pre_get_posts\', \'modify_search_results_order\', 10, 2 );
function modify_search_results_order( $query ) {
if ( ! $query->is_main_query() || is_admin() || ! is_search() ) {
return $query;
}
$query->query_vars[\'order\'] = \'DESC\';
$query->query_vars[\'orderby\'] = \'meta_value date\';
$query->query_vars[\'meta_query\'] = [
\'relation\' => \'OR\',
array(
\'key\' => \'_prioritize_s\',
\'compare\' => \'EXISTS\'
),
array(
\'key\' => \'_prioritize_s\',
\'compare\' => \'NOT EXISTS\'
)
];
return $query;
}