首先$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.