Функция is_tax () работает не так, как ожидалось

Я столкнулся с проблемой с функцией is_tax ().

Я метод класса, который выбирает конкретные пользовательские типы сообщений. Эти пользовательские типы сообщений имеют настраиваемые поля, связанные с таксономией (среди других настраиваемых полей).

Если в этих настраиваемых полях я нахожу, например, значение для термина категории «discografia», я хочу, чтобы мой метод возвращал этот настраиваемый тип сообщения, если в настоящее время я вижу страницу архива / категорию / discografia.

Это отрывок из моего кода:

// The Query /** @var $query WP_Query */ $query = new WP_Query($query_args); $results = false; // The Loop if ($query->have_posts()) { if (!is_home() && !is_front_page()) { $posts = $query->get_posts(); foreach ($posts as $post) { $add = false; //ServiceBoxes::getBox returns the $post object as Array_A //and adds a new key "meta" with the custom fields I want to use $box = ServiceBoxes::getBox($post->ID); if (is_archive()) { if (isset($box['meta'][self::$prefix]['taxonomies'])) { foreach ($box['meta'][self::$prefix]['taxonomies'] as $tax => $terms) { if ($terms) { if (is_tax($tax, $terms)) { $add = true; } } } } } if ($add) $results[] = $box; } } else { $results = $query->get_posts(); } return $results; } return false; 

Некоторые пояснения о том, что здесь происходит: 1. $ box ['meta'] [self :: $ prefix] ['taxonomies'] фактически возвращает массив с «категорией» в качестве ключа и массивом терминов (в том числе «discografia») 2 . Url / category / discografia / фактически возвращает серию сообщений 3. is_tax ($ tax, $ terms) возвращает false 4. Также is_tax ('category', 'discografia') возвращает false

Я подозреваю, что экземпляр WP_Query внутри моего метода переопределяет глобальный запрос, но я не понимаю, почему: это новый экземпляр, нет причин для того, чтобы is_tax () запутался.

Однако, с некоторой пошаговой отладкой, вот что происходит в is_tax при вызове is_tax('category', array('discografia')) :

  • $wp_query->is_tax( $taxonomy, $term ) вызывается is_tax()
  • в $wp_query->is_tax() , if ( !$this->is_tax ) возвращает false

Я смог достигнуть этого момента: после этого я не знаю, что еще я могу сделать, чтобы понять, почему свойство is_tax не установлено так, как ожидалось.

С включенным отладчиком и некоторыми переменными в списке часов, вот что я вижу при вызове «/ category / discografia /» (страница архива, которая, повторяю, возвращает сообщения): http://www.evernote.com/ осколок / s6 / ш / 88f05447-edff-40c7-9670-902f0a92bc62 / b50a28d39c9e55c7d404f912175975a4

Если вы посмотрите на эту часть класса WP_Query :

  switch ( $tax_query['taxonomy'] ) { case 'category': $this->is_category = true; break; case 'post_tag': $this->is_tag = true; break; default: $this->is_tax = true; } 

то это выглядит как в категориях архивных страниц, где is_category дает true тогда is_tax является false .

Таким образом, похоже, вам придется использовать сочетание is_category и is_tax 😉

Обновить:

Взгляните на этот билет:

is_tax () возвращает false, когда is_category () или is_tag () возвращает true

http://core.trac.wordpress.org/ticket/18636

Статус на данный момент закрыт wontfix !