Comment obtenir les IDs de variation produit par catégorie ou étiquette sous WooCommerce ?

Il est très facile d’obtenir des produits appartenant à une catégorie de produit ou à une étiquette de produit. Ce qui est beaucoup plus difficile, c’est d’obtenir des variations individuelles basées sur une catégorie de produit ou une étiquette de produit, car les variations… n’ont pas de catégorie ou d’étiquette, et appartiennent plutôt à leur variable « parent », le produit.

Dans ce billet, nous allons définir une fonction que vous pouvez réutiliser dans votre code personnalisé chaque fois que vous avez besoin d’obtenir tous les ID de variation basés sur une catégorie de produit ou une étiquette de produit donné. Vous pouvez ensuite parcourir le tableau en boucle et retourner les informations dont vous avez besoin. Bonne lecture !

function get_variations_from_term( $term, $taxonomy, $type ) {
    global $wpdb;
    $ids = $wpdb->get_col( "
        SELECT DISTINCT p.ID
        FROM {$wpdb->prefix}posts as p
        INNER JOIN {$wpdb->prefix}term_relationships as tr ON ( p.ID = tr.object_id OR p.post_parent = tr.object_id )
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON tr.term_taxonomy_id = tt.term_taxonomy_id
        INNER JOIN {$wpdb->prefix}terms as t ON tt.term_id = t.term_id
        WHERE p.post_type = 'product_variation'
        AND p.post_status = 'publish'
        AND p.ID NOT IN (
         SELECT DISTINCT post_parent
         FROM {$wpdb->prefix}posts
         WHERE post_type = 'product_variation'
         AND post_status = 'publish'
      )
        AND tt.taxonomy = '$taxonomy'
        AND t.$type = '$term'
    " );
   return $ids;
}Langage du code : PHP (php)

Vous pouvez ensuite utiliser la procédure suivante pour obtenir les identifiants de variation par catégorie ou par étiquette :

// PAR CATÉGORIE DE PRODUIT
get_variations_from_term( 'chaises', 'product_cat', 'slug' );
get_variations_from_term( 59, 'product_cat', 'term_id' );
// ETC
 
// PAR ÉTIQUETTE DE PRODUIT
get_variations_from_term( 'brillant', 'product_tag', 'slug' );
get_variations_from_term( 'Très lourd', 'product_tag', 'name' );
// ETCLangage du code : JavaScript (javascript)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *