首先$query
对象是通过引用传递的,不需要返回$query
在里面pre_get_posts
.
第二is_post_type_archive( \'events\' )
很好用,你不需要使用query->query_vars[]
.
更正后的代码如下所示:
function my_pre_get_posts( $query ) {
if( ! is_admin() && is_main_query() && is_post_type_archive( \'events\' ) ) {
$query->set(\'orderby\', \'meta_value_num\');
$query->set(\'meta_key\', \'vdatum\');
$query->set(\'order\', \'ASC\');
}
}
add_action(\'pre_get_posts\', \'my_pre_get_posts\');
第三,这个操作在您的情况下可能不起作用,因为您将链接输出到上一篇和下一篇文章的方式不同。在里面
pre_get_posts
可以为main
WP_Query
, 但它不适用于其他功能,例如
get_next_post()
,
get_previous_post()
,
get_adjacent_post()
.
但是,这些函数使用过滤器get_{$adjacent}_post_sort
, 默认值为"ORDER BY p.post_date $order LIMIT 1"
. 您可以尝试将此筛选器与get_{$adjacent}_post_join
添加元查询。
请参见“过滤器”部分on this page.