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 Вы увидите этот конкретный крюк проходов по двум переменным. Вторая переменная - это идентификатор категории, но ваша функция обратного вызова рассматривает эту вторую входящую переменную как объект запроса.
Проще говоря, вы ищете query_vars
свойство/ключ, который не существует и не может существовать, потому что входящая переменная не является объектом запроса.