链接中带有查询的排序循环

时间:2014-04-25 作者:CK13

我想添加一些按钮,将按名称asc/desc等对帖子进行排序。我想在链接中使用如下查询

http://domain.tld/?orderby=name&order=asc
这个使用安全吗?

是否有重写规则可用于将orderby=name更改为order name,将order=asc更改为升序?

1 个回复
SO网友:Steven Jones

你可以使用重写规则,但按照你所说的方式来做应该没问题。

只要清理查询字符串,这是安全的。

使用add_query_arg() 您可以将查询添加到当前URL的末尾,如下所示:

   $link = add_query_arg( \'orderby\', \'name\', get_permalink() );
例如,您可以将其应用于按钮:

   <a href="<?php echo $link; ?>">Sort by name</a>
现在,当您单击该链接时,它会将“orderby=name”添加到您的URL中。您可以手动执行此操作,但add_query_arg() 使其更简单、更干净remove_query_arg() 来帮助你。

现在我们已经更改了URL,现在需要进行排序。我假设您使用的是标准主页查询,这是最近的10篇文章,我们将使用pre_get_posts 完成任务。如果您对此不熟悉,那么您应该仔细阅读并了解如何利用它,而不是创建二次查询(如果您目前确实在这样做的话)。

function wpse_142352_orderby( $query ) {

    // Don\'t do this in the admin and ONLY for the main loop
    if ( is_admin() || ! $query->is_main_query() )
        return;

    // Only on the frontpage
    if ( is_home() ) {

        // Safely get the orderby value
        $orderby = sanitize_key( $_GET[\'orderby\'] );

        // If orderby is set then do it
        if (isset($orderby) {
              $query->set( \'orderby\', $orderby );
              return;
        }
    }

}
add_action( \'pre_get_posts\', \'wpse_142352_orderby\', 1 );
这意味着现在,它将按字母顺序显示第一个(或最后一个,取决于顺序=ASC或DESC)10篇文章,而不是显示最近的10篇文章。

希望这有帮助。

结束

相关推荐

Custom Search Query

我想设置一个自定义搜索页面,该页面执行以下操作:用户以一种他希望在搜索中看到返回的表单(基本上是从标签列表中选择)检查多个项目。返回与他选择的所有标记匹配的结果(使用和不使用或)。具体示例如下:返回标记=“小学”和“公园”的“区域”类别中的所有帖子我需要为我的搜索表单命名特别的内容吗在搜索结果页面上,如何对自定义查询进行编码,使其能够捕获区域类别内的所有帖子,并具有用户在搜索表单中选择的所有标签的标签