Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с wordpress.stackexchange
scroll top