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?
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.
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';
}
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;
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/
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.