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

25

Comment puis-je vérifier si un produit se trouve dans 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'effet sur le single-product.php . Je veux avoir les conditions supérieures. Une solution pour cela sur une page mono-produit?

Alex
la source
Peut-être parce que votre première déclaration manque une fermeture )? Il devrait êtreif (is_product_category('audio'))
stealthyninja
Bonne prise, mais ce n'est pas ça. is_product_category ne semble pas fonctionner sur single-product.php
Alex

Réponses:

28

Je ne pense pas que ce 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 comme balises d'ancrage, très bien pour l'affichage, mais pas idéal pour déterminer dans le code quelles sont les catégories. Ok, donc la première chose que vous devez faire est de récupérer l'objet produit / publication pour la page actuelle 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 termes de catégorie en un tableau simple nommé $categoriesafin qu'il soit plus facile de voir quels slugs sont attribués. Notez que cela retournera toutes les catégories affectées au produit, pas seulement celle de la page actuelle, 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

Mettre tous ensemble:

<?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 cherchiez et répond à votre question.

Justin Stern
la source
37

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';
}
Milo
la source
Un moyen super simple et efficace de le faire. Je pense que c'est une meilleure réponse.
Trevor
J'ai préféré cela parce que c'était court. Comme je l'ai faitif { thing; return;}
Eoin
8

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

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

// Do stuff here

else :

// Do some other stuff

endif;
Koshensky
la source
Je pense que cette réponse devrait être ajoutée, en tant qu'édition, à la réponse de Milo.
cybmeta
4

C'est vieux mais juste au cas où les gens cherchent toujours WooThemes comme une solution simple:

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

* Remplacez «votre_catégorie» par ce que vous utilisez.

Voici le lien vers la documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/

tiaNaturally
la source
0

Je regarderais en utilisant la get_categories()fonction de la classe WC_Product.

Vous pouvez trouver le lien vers la documentation ici .

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

Steve
la source
Je ne suis pas en mesure de coder cela. Je ne sais pas comment faire fonctionner cela. Quelqu'un veuillez illustrer cela. J'ai fait de mon mieux là-haut. Dois-je le remplacer par get_categories ()?
Alex
@Alex, la fonction is_product_category () renvoie VRAI si vous êtes sur la page de catégorie de produit. Pas la catégorie du produit. Je suis sur un projet en ce moment, mais j'essaierai de vous obtenir un extrait de code plus tard.
Steve
Merci, Steven d'avoir pris le temps de coder ce petit extrait. Je l'apprécie beaucoup.
Alex