Pre get posts for single post

时间:2016-11-11 作者:Rene

我预先获取事件存档页面的帖子:http://www.netzwerk-leipziger-freiheit.de/veranstaltungen/

function my_pre_get_posts( $query ) {
// do not modify queries in the admin
    if( is_admin()  ){  
    return $query;
}

// only modify queries for \'event\' post type
if( isset($query->query_vars[\'post_type\']) && $query->query_vars[\'post_type\'] == \'events\' ) {
    $query->set(\'orderby\', \'meta_value_num\');   
    $query->set(\'meta_key\', \'vdatum\');   
    $query->set(\'order\', \'ASC\');
}

   // return
    return $query;
}

add_action(\'pre_get_posts\', \'my_pre_get_posts\');
这一切都可以,但如果您选择单个事件,则顺序不取决于pre-get-post查询。当您转到事件左侧按钮上的最后一个事件时,它以404结尾。

我很乐意找到任何解决方案。

1 个回复
SO网友:Ihor Vorotnov

首先$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 可以为mainWP_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.

相关推荐

Page Get参数不适用于is_Single()函数

如果博客帖子中存在页面参数,我必须重定向到404页面,而不是当前的帖子URL。我尝试检查当前页面类型(单数),并尝试在函数中获取页面参数。php,但我不能。它不能一起工作。我只需要为博客帖子实现它。如果可能的话。htaccess重定向也很好我尝试过这个代码,但它不起作用。但它在没有is\\u单一功能的情况下工作。使用is\\u single函数时,page参数不返回。Url示例:www.example.com/this-is-my-first-post?page=2www.example.com/p=22