Comment vérifier si le produit est dans une certaine catégorie sur un seul produit.php dans Woocommerce?

19

Comment puis-je vérifier si un produit appartient à une certaine catégorie de produits sur le single-product.php ?

<?php if (is_product_category('audio')) {
           echo 'In audio';
               woocommerce_get_template_part( 'content', 'single-product' );

      } elseif (is_product_category('elektro')) {

            echo 'In elektro';
            woocommerce_get_template_part( 'content', 'single-product' );
         } else {
            echo 'some blabla'; }  ?>

is_product_category ('slug') n'a pas d'incidence sur le single-product.php . Je veux avoir les conditionnels supérieurs. Une solution à ce problème sur une page contenant un seul produit?

    
posée Alex 12.12.2012 - 20:34
la source

5 réponses

23

Je ne pense pas que get_categories() soit la meilleure option pour vous dans ce cas car il renvoie une chaîne avec toutes les catégories répertoriées en tant que balises d'ancrage, très bien pour l'affichage, mais pas génial pour déterminer dans le code quelles sont les catégories. . Ok, la première chose à faire est de saisir l'objet product / post de la page en cours si vous ne l'avez pas déjà:

global $post;

Ensuite, vous pouvez obtenir les objets de terme de catégorie de produit (les catégories) pour le produit. Ici, je transforme les objets de terme de catégorie en un simple tableau nommé $categories afin qu'il soit plus facile de voir quels slugs sont attribués. Notez que cela renverra toutes les catégories assignées au produit, pas seulement celle de la page en cours, c'est-à-dire si nous sommes sur /shop/audio/funzo/ :

$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

Il suffit ensuite de vérifier si une catégorie est dans la liste:

if ( in_array( 'audio', $categories ) ) {  // do something

Rassembler tout cela:

<?php
global $post;
$terms = wp_get_post_terms( $post->ID, 'product_cat' );
foreach ( $terms as $term ) $categories[] = $term->slug;

if ( in_array( 'audio', $categories ) ) {
  echo 'In audio';
  woocommerce_get_template_part( 'content', 'single-product' );
} elseif ( in_array( 'elektro', $categories ) ) {
  echo 'In elektro';
  woocommerce_get_template_part( 'content', 'single-product' );
} else {
  echo 'some blabla';
}

J'espère que c'est ce que vous recherchiez et répond à votre question.

    
réponse donnée Justin Stern 18.12.2012 - 20:05
la source
25

has_term devrait fonctionner dans ce cas:

if ( has_term( 'audio', 'product_cat' ) ) {

       echo 'In audio';
       woocommerce_get_template_part( 'content', 'single-product' );

} elseif ( has_term( 'elektro', 'product_cat' ) ) {

       echo 'In elektro';
       woocommerce_get_template_part( 'content', 'single-product' );

} else {
       echo 'some blabla';
}
    
réponse donnée Milo 18.12.2012 - 20:14
la source
6

Il est intéressant de noter que vous pouvez parcourir une liste d'options en appelant un tableau plutôt que de devoir encombrer votre code de nombreuses vérifications elseif, en supposant que vous souhaitiez faire la même chose avec chaque catégorie correspondante.

if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) :

// Do stuff here

else :

// Do some other stuff

endif;
    
réponse donnée Koshensky 18.02.2015 - 17:13
la source
2

C’est vieux, mais au cas où les gens chercheraient toujours WooThemes comme une solution simple:

if ( is_product() && has_term( 'your_category', 'product_cat' ) ) {
    //do code
}

* Changez 'votre_catégorie' pour ce que vous utilisez.

Voici le lien vers la documentation: enlace

    
réponse donnée tiaNaturally 09.06.2016 - 23:37
la source
0

J'utiliserais la fonction get_categories() de la classe WC_Product.

Vous pouvez trouver le lien vers la documentation ici .

Dans la boucle de la page, appelez la fonction pour renvoyer les catégories associées au produit.

    
réponse donnée Steve 12.12.2012 - 23:26
la source

Lire d'autres questions sur les étiquettes