add_query_arg不起作用
题
在类别导航时,我添加了一个过滤器以将参数附加到URL上。仅当浏览类别时 sort
参数已设置。
例如,当您单击以大多数选票的方式查看所有帖子时,将显示高票的帖子。从那里您可以通过附加一个类别查看大多数投票的帖子 sort=most_voted
或者 sort=doleast_voted
与URL cat=?
.
add_filter( 'category_link','append_parameter', 10, 2 );
function append_parameter( $link, $query ) {
$my_parameter = $query->query_vars['sort']; //get sort value
if ( isset($my_parameter) ) { //if browsing posts by votes
$link = add_query_arg( 'sort', $my_parameter, $link );
}
return $link;
}
我无法弄清楚为什么不将排序参数附加到URL上。但是,这起作用,没有IF语句和值,而不是 $my_parameter
在add_query_arg中。
编辑:新的工作代码
add_filter( 'category_link','append_parameter', 10, 2 );
function append_parameter( $link, $my_parameter ) {
$my_parameter = $_GET['sort']; //get sort value
if ( isset($my_parameter) ) {
$link = add_query_arg( 'sort', $my_parameter, $link );
}
return $link;
}
解决方案
如果您看看 category_link
挂钩定义在 类别-template.php 您会看到这个特定的钩子通过两个变量。第二个变量是类别ID,但是您的回调函数将第二个传入变量视为查询对象。
简而言之,您正在寻找 query_vars
不存在也不存在的属性/键,因为传入变量不是查询对象。