你可以使用重写规则,但按照你所说的方式来做应该没问题。
只要清理查询字符串,这是安全的。
使用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篇文章。
希望这有帮助。