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?


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.


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';
}

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;

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


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.