web-dev-qa-db-fra.com

la fonction is_tax () ne fonctionne pas comme prévu

Je suis confronté à un problème avec la fonction is_tax ().

Je suis une méthode de classe qui récupère un type de publication personnalisé spécifique. Ces types de publication personnalisés ont des champs personnalisés liés à la taxonomie (parmi d'autres champs personnalisés).

Si, par exemple, je trouve dans ces champs personnalisés une valeur pour le terme de catégorie "discografia", je souhaite que ma méthode renvoie ce type de publication personnalisé si la page/catégorie/discografia de l'archive est affichée.

Ceci est un extrait de mon code:

// 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;

Quelques précisions sur ce qui se passe ici: 1. $ box ['méta'] [self :: $ prefix] ['taxonomies'] renvoie en fait un tableau avec "catégorie" comme clé et un tableau de termes (y compris "discografia") 2 L'URL/category/discografia/renvoie en fait une série d'articles 3. is_tax ($ tax, $ terms) renvoie false 4. De plus, is_tax ('category', 'discografia') renvoie false

Je soupçonne que l'instance de WP_Query à l'intérieur de ma méthode est en train de surcharger la requête globale, mais je ne vois pas pourquoi: c'est une nouvelle instance, il n'y a aucune raison de confondre is_tax ().

Cependant, avec un débogage pas à pas, voici ce qui se passe dans is_tax lorsqu'il est appelé en tant que is_tax('category', array('discografia')):

  • $wp_query->is_tax( $taxonomy, $term ) est appelé par is_tax()
  • dans $wp_query->is_tax(), if ( !$this->is_tax ) renvoie false

J'ai pu atteindre ce point: après cela, je ne sais plus quoi faire pour comprendre pourquoi la propriété is_tax n'est pas définie comme prévu.

Avec le débogueur activé et certaines variables dans la liste de surveillance, voici ce que je peux voir en appelant "/ category/discografia /" (une page d’archive qui, je le répète, renvoie des articles): http: //www.evernote. com/shard/s6/sh/88f05447-edff-40c7-9670-902f0a92bc62/b50a28d39c9e55c7d404f912175975a4

1
Andrea Sciamanna

Si vous regardez cette partie de la classe 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;
            }

cela ressemble alors à pages d'archives de catégories is_category donne true alors is_tax est false.

Il semble donc que vous devrez utiliser un mélange de is_category et is_tax ;-)

Update:

Regardez ce billet:

is_tax () renvoie false lorsque is_category () ou is_tag () renvoie true

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

Son statut est actuellement fermé avec wontfix !

1
birgire