Исключить пользовательский термин таксономии WordPress из query_posts()

Я добавил следующий код на одну из страниц моего архива, непосредственно перед циклом. Мне нужно, чтобы этот конкретный архив отображался в алфавитном порядке, а не в хронологическом. Это делает то, что должно делать.

global $query_string;
$posts = query_posts($query_string . '&orderby=title&order=asc&posts_per_page=-1');

Мне также нужно исключить определенный термин таксономии. Моя таксономия называется «по типу компании», и я хочу исключить из нее термин «рекомендуемые». Я могу отфильтровать его, чтобы показать ТОЛЬКО этот термин таксономии, добавив &company-type=featured, но мне нужно сделать обратное.

Все, что я нашел для достижения этой цели, использует совсем другой синтаксис. Я попытался сопоставить мои текущие аргументы с этим синтаксисом, но безуспешно, и я не могу понять, как это впишется в этот пример. В примерах, которые я видел, используется параметр tax_query, но я не могу заставить его работать с моим кодом.

Я знаю, что, вероятно, есть несколько способов сделать это, и я читал, что использование query_posts не обязательно является лучшим решением, но это единственный способ, с которым я пока работал. Может кто-нибудь мне помочь?


person Adam Nerland    schedule 02.06.2016    source источник
comment
Проверьте этот вопрос. Это поможет вам.   -  person Gunaseelan    schedule 02.06.2016
comment
Спасибо, @Gunaseelan. Я видел этот пост в своем первоначальном поиске и пытался реализовать остальную часть своего кода, используя этот формат, но мне не удалось заставить его работать.   -  person Adam Nerland    schedule 02.06.2016


Ответы (1)


Хорошо, я заработал. Я использовал другой синтаксис, который пробовал несколько раз, но он у меня не работал, потому что я не знал, как включить в него исходные аргументы из моего $query_string.

Существует функция WordPress под названием wp_parse_args, которая преобразует их в один и тот же формат для вас. Это код, с которым я закончил. (Я также переключился на WP_Query вместо query_posts, теперь, когда я понимаю, почему это не работало для меня раньше.)

global $query_string;

$args = array( 
  'tax_query' =>  array (
    array(
      'taxonomy' => 'company-type', // My Custom Taxonomy
      'terms' => 'featured', // My Taxonomy Term that I wanted to exclude
      'field' => 'slug', // Whether I am passing term Slug or term ID
      'operator' => 'NOT IN', // Selection operator - use IN to include, NOT IN to exclude
    ),
  ),
  'posts_per_page' => -1,
  'orderby' => 'title',
  'order'=>'ASC'
);

$args = wp_parse_args( $query_string, $args );
$query = new WP_Query( $args );
person Adam Nerland    schedule 02.06.2016
comment
Хорошо, что вы перешли на WP_Query, query_posts() — это просто ужасный способ выполнения пользовательских запросов, и его следует НИКОГДА НИКОГДА не использовать. - person Pieter Goosen; 02.06.2016