我正在尝试按特定的meta_key
. 关键是我需要返回所有结果,即使在meta_key
帖子是属于事件的自定义帖子类型。
已使用以下方法将结果排序为一组特定的自定义帖子类型:
function SearchFilter($query) {
if (!is_admin() && $query->is_search() ) {
$query->set(\'post_type\', array( \'event\', \'university\', \'organization\'));
}
return $query;
}
add_action(\'pre_get_posts\',\'SearchFilter\', 9999);
还有一些其他筛选正在进行,以便筛选出已通过的事件或设置为自定义字段“off”的事件。如果需要的话,我也可以发布用于这样做的代码。
基本上,我可以使用
$query->set(\'meta_key\', \'wpcf-start-date\');
$query->set(\'orderby\', array(\'meta_value\' => \'ASC\'));
按事件日期排序事件。这很好,但不会返回任何
\'\'
(我假设为空)在
wpcf-start-date
领域
我试着用这个问题的答案:
Order posts by custom field and if custom field is empty return remaining posts
但是,要么我不太了解正在发生的事情,无法定制它以供我使用,要么就是它对我不起作用。
我可以根据要求提供任何其他信息。
任何帮助都将不胜感激!
<小时>
UPDATE:
我又在看我提到的另一个堆栈问题。我有一个有效的方法:
function sortResults( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
$query->set( \'meta_key\', \'wpcf-start-date\' );
$query->set( \'orderby\', \'meta_value\');
$query->set( \'order\', \'DESC\');
add_filter( \'get_meta_sql\', \'filterResults\' );
}
add_action( \'pre_get_posts\', \'sortResults\' );
function filterResults( $clauses ) {
remove_filter( \'get_meta_sql\', \'filterResults\' );
// Change the inner join to a left join,
// and change the where so it is applied to the join, not the results of the query.
$clauses[\'join\'] = str_replace( \'INNER JOIN\', \'LEFT JOIN\', $clauses[\'join\'] ) . $clauses[\'where\'];
$clauses[\'where\'] = \'\';
return $clauses;
}
但与另一个问题一样,这将无日期的事件放在顶部,日期的事件放在底部。另一个问题建议使用两个循环。我的网站上似乎没有两个循环。搜索结果页面是高度定制的。