web-dev-qa-db-fra.com

Woocommerce - comment savoir si un produit a des variations ou non

J'essaie d'éditer le modèle de description courte pour qu'il soit différent sur les pages de produit variables (simples) que sur les produits simples. le code dans cette page est ici:

global $post;
if ( ! $post->post_excerpt )
    return;
?>
<div itemprop="description">
    <?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
</div>

Je veux ajouter du code à l'instruction if qui ressemblera à quelque chose comme

si post comporte des variantes, ne pas afficher de brève description, si un produit simple affiche

mais je ne trouve aucun moyen dans le code de faire la distinction entre une publication de produit simple et régulière et une autre qui est variable (comporte des variantes). Et en parcourant la documentation de l'API sur le site Woo ( http://docs.woothemes.com/wc-apidocs/ ), je n'ai rien trouvé de ce genre. 

14
Stephen

Après beaucoup de chagrin d'amour, j'ai trouvé les deux solutions suivantes:

Dans la boucle du produit, vous pouvez utiliser ceci:

 if( $product->has_child() ) { 

mais pour une raison quelconque dans la description courte sur la page du produit unique, je devais utiliser ceci:

global $post;
$children = get_pages('child_of='.$post->ID);
if( count( $children ) !== 0 ) {

J'espère que cela aidera les autres qui luttaient comme moi ...

26
Stephen

Utilisez la fonction $product->is_type() pour vérifier le type de produit. Pour vérifier si le produit est un produit variable, utilisez:

global $product;

// $product->is_type( $type ) checks the product type, string/array $type ( 'simple', 'grouped', 'variable', 'external' ), returns boolean

if ( $product->is_type( 'variable' ) ) {}

Il existe également une fonction $product->get_type() qui renvoie le type interne d'un produit sous forme de chaîne.

43
Danijel

Pour une raison quelconque, si vous avez supprimé votre variante, la fonction has_child () devient toujours vraie.

J'ai donc utilisé la solution ci-dessous

if(empty($product->get_available_variations())) {
  // Your code goes here
}
0
Mario Shtika