web-dev-qa-db-fra.com

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

Comment puis-je vérifier dans le monde 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'effet sur le single-product.php . Je veux avoir les conditionnels supérieurs. Une solution pour cela sur une page produit unique?

22
Alex

Je ne pense pas que get_categories() soit la meilleure option pour vous dans ce cas car il retourne une chaîne avec toutes les catégories répertoriées comme balises d'ancrage, très bien pour l'affichage, mais pas très utile 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;

Vous pouvez ensuite 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 tableau simple nommé $categories afin qu'il soit plus facile de voir quels slugs sont attribués. Notez que cela retournera all categories 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;

Ensuite, il suffit 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.

26
Justin Stern

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

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.

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

// Do stuff here

else :

// Do some other stuff

endif;
7
Koshensky

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: https://docs.woothemes.com/document/remov-product-content-based-on-category/

3
tiaNaturally

Je regarderais en utilisant la fonction get_categories() 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.

0
Steve