如何使用Add_Query_var覆盖orderby

时间:2014-09-02 作者:ngearing

所以我希望有一个档案,以随机顺序显示其帖子。

<?php    
    $query = new WP_Query($query_string."&orderby=rand");
?>
但如果用户选择,他们也可以通过单击按钮以不同的方式排列帖子。

<?php
    $sort_date = add_query_arg(array(\'orderby\'=>\'date\',\'order\'=>\'asc\'));
    $sort_name = add_query_arg(array(\'orderby\'=>\'title\',\'order\'=>\'asc\'));
?>

<div class="sort">
    Sort by: <a href="<?php echo $sort_date; ?>">Date Listed</a> | <a href="<?php echo  $sort_name; ?>">Name</a>
</div>
这两件事是分开工作的,但当我尝试将它们一起使用时,归档文件会随机显示帖子。

我怎样才能让这两个一起工作?

2 个回复
最合适的回答,由SO网友:ngearing 整理而成

所以我终于明白了。

使用pre_get_posts 以及$_GET 用于检查是否添加了任何查询参数的全局变量非常有用。

我使用以下代码来获得所需的结果。

function my_pre_get_posts($query) {
    if(
        $query->is_main_query() && 
        is_archive() && 
        !isset($_GET[\'orderby\']) && // checks for query args
        !is_admin()
    ) {
        $query->set(\'orderby\',\'rand\');
    }
add_action(\'pre_get_posts\', \'my_pre_get_posts\');

SO网友:Abhik

使用pre_get_posts 相反

function my_archive_query_override( $query ) {
    if ( $query->is_archive() && $query->is_main_query() ) {
        $query->set( \'orderby\', \'rand\' );
    }
}
add_action( \'pre_get_posts\', \'my_archive_query_override\' );
对于用户可选择的部分,可以使用AJAX来完成。

结束

相关推荐

WP_QUERY:类别中的帖子或自定义帖子类型

我不想打扰你们,但这已经让我发疯了。我有一个名为“listas-2”的特定类别中的遗留帖子模型,它使用短代码来显示一些奇特的东西。现在,我已经创建了一个名为“lista”的自定义post类型,它使用post\\u metas做了同样的事情,但做得更好。现在的问题是,我必须在分页的同时对两者进行归档,其中包含遗留和新帖子。我无法同时显示两者,已经尝试添加tax\\u查询,但我无法,因为自定义帖子类型不使用它,只使用普通帖子。我还尝试合并查询,但我遇到了很多分页问题。目标:一个WP\\u查询,请求类别“lis