Comment vérifier si le produit est dans une certaine catégorie sur un single-product.php dans Woocommerce?
-
-
Peut-êtreparce que votrepremière déclarationmanque unefermeture `)`?Cela devrait être `if (is_product_category ('audio'))`Might be because your first statement is missing a closing `)`? It should be `if (is_product_category('audio'))`
- 0
- 2012-12-12
- stealthyninja
-
Bonneprise,mais cen'estpas ça.is_product_categoryne semblepasfonctionner sur single-product.phpGood catch, but that's not it. is_product_category doesn't seem to work on single-product.php
- 0
- 2012-12-12
- Alex
-
5 réponses
- votes
-
- 2012-12-18
Jene pensepas que
get_categories()
soit lameilleure optionpour vous dans ce cas,caril renvoie une chaîne avectoutes les catégories répertoriées commebalises d'ancrage,bien pour l'affichage,maispasidéalpourfigurer dans le code quelles sont les catégories. Ok,donc lapremière chose àfaireest de récupérer l'objetproduit/article de lapage actuelle si vousne l'avezpas déjà:global $post;
Vouspouvezensuite obtenir les objets determe de catégorie deproduit (les catégories)pour leproduit. Ici,je transforme les objets determe de catégorieen un simpletableaunommé
$categories
pour qu'il soitplusfacile de voir quels slugs sont affectés. Notez que cela renverra toutes les catégories affectées auproduit,pas seulement celle de lapage actuelle,c'est-à-dire sinous sommes sur/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Ilne resteplus qu'à vérifier si une catégorieest dans la liste:
if ( in_array( 'audio', $categories ) ) { // do something
Rassemblertout 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 recherchiezet répond à votre question.
I don't think
get_categories()
is the best option for you in this case because it returns a string with all the categories listed as anchor tags, fine for displaying, but not great for figuring out in code what the categories are. Ok, so the first thing you need to do is grab the product/post object for the current page if you don't already have it:global $post;
Then you can get the product category term objects (the categories) for the product. Here I'm turning the category term objects into a simple array named
$categories
so it's easier to see what slugs are assigned. Note that this will return all categories assigned to the product, not just the one of the current page, ie if we're on/shop/audio/funzo/
:$terms = wp_get_post_terms( $post->ID, 'product_cat' ); foreach ( $terms as $term ) $categories[] = $term->slug;
Then we just have to check whether a category is in the list:
if ( in_array( 'audio', $categories ) ) { // do something
Putting it all together:
<?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'; }
Hopefully this is what you were looking for and answers your question.
-
- 2012-12-18
has_term
devraitfonctionner 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'; }
has_term
should work in this case: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'; }
-
Unmoyen super simpleet efficace de lefaire.Jepense que c'est unemeilleure réponse.Super simple and effective way to do this. I think this is better answer.
- 0
- 2017-05-25
- Trevor
-
J'aipréféré celaparce que c'était court.Cependantj'aifait `if {chose;retour;} `I preferred this because it was short. However I did `if { thing; return;}`
- 0
- 2018-01-31
- Eoin
-
- 2015-02-18
Ilestintéressant denoter que vouspouvezparcourir une liste d'optionsen appelant untableauplutôt que d'avoir àencombrer votre code avecbeaucoup de vérificationselseif,en supposant que vous vouliezfaire lamê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;
It's worth noting that you can go through a list of options by calling an array rather than having to clutter up your code with lots of elseif checks, assuming you want to do the same thing with each category that is.
if( has_term( array( 'laptop', 'fridge', 'hats', 'magic wand' ), 'product_cat' ) ) : // Do stuff here else : // Do some other stuff endif;
-
Jepense que cette réponse devrait être ajoutée,àtitre d'édition,à la réponse de Milo.I think this answer should be added, as edittion, to Milo's answer.
- 0
- 2015-02-18
- cybmeta
-
- 2016-06-09
C'est vieux,maisjuste au cas où lesgens cherchenttoujours WooThemes comme une solution simple:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
* Remplacez "votre_catégorie"par celle que vous utilisez.
Voici le lien vers la documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
This is old but just in case people are still looking WooThemes as a simple solution:
if ( is_product() && has_term( 'your_category', 'product_cat' ) ) { //do code }
*Change 'your_category' to whatever you are using.
Here is the link to the documentation: https://docs.woothemes.com/document/remov-product-content-based-on-category/
-
- 2012-12-12
Je voudrais utiliser lafonction
get_categories()
de la classe WC_Product.Vouspouveztrouver le lien vers la documentation ici .
Fondamentalement,dans laboucle de lapage,appelez lafonctionpour renvoyer les catégories associées auproduit.
I'd look at using the
get_categories()
function of the WC_Product class.You can find the link to the documentation here.
Basically within the loop of the page call the function to return the categories associated with the product.
-
Jene peuxpas coder cela.Jene saispas commentfairefonctionner cela.Quelqu'un s'il vousplaîtillustrer cela.J'aifait demonmieux là-haut.Dois-je le remplacerparget_categories ()?I am not able to code this. I don't have a clue how to get this to work. Somebody please illustrate this. I tried my best up there. Should I replace this with get_categories()?
- 0
- 2012-12-13
- Alex
-
@Alex lafonctionis_product_category () renvoie TRUE si vous êtes sur lapage de catégorie deproduit.Pas la catégorie duproduit.Je suisen têtepour unprojeten cemoment,maisje vaisessayer de vous obtenir unextrait de codeplustard.@Alex the is_product_category() function returns TRUE if you're on the product category page. Not the category of the product. I'm heads down on a project right now, but I'll try to get you a code snippet later.
- 0
- 2012-12-13
- Steve
-
Merci Steven d'avoirpris letemps de coder cepetit extrait.Je l'appréciebeaucoup.Thanks, Steven for taking time to code this little snippet. Appreciate it very much.
- 0
- 2012-12-13
- Alex
Commentpuis-je vérifier si unproduit appartient à une certaine catégorie deproduits sur le single-product.php ?
is_product_category ('slug') n'apas d'effet sur le single-product.php .Je veux avoir les conditions supérieures.Une solutionpour cela sur unepagemono-produit?