J'ai utilisé le code suivant pour obtenir la liste des catégories de produits de WooCommerce sur mon WordPress website:
<?php
$taxonomy = 'product_cat';
$orderby = 'name';
$show_count = 0; // 1 for yes, 0 for no
$pad_counts = 0; // 1 for yes, 0 for no
$hierarchical = 0; // 1 for yes, 0 for no
$title = '';
$empty = 0;
$args = array(
'taxonomy' => $taxonomy,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
?>
<?php $all_categories = get_categories( $args );
//print_r($all_categories);
foreach ($all_categories as $cat) {
//print_r($cat);
if($cat->category_parent == 0) {
$category_id = $cat->term_id;
?>
<?php
echo '<br /><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>'; ?>
<?php
$args2 = array(
'taxonomy' => $taxonomy,
'child_of' => 0,
'parent' => $category_id,
'orderby' => $orderby,
'show_count' => $show_count,
'pad_counts' => $pad_counts,
'hierarchical' => $hierarchical,
'title_li' => $title,
'hide_empty' => $empty
);
$sub_cats = get_categories( $args2 );
if($sub_cats) {
foreach($sub_cats as $sub_category) {
echo $sub_category->name ;
}
} ?>
<?php }
}
?>
Cela fonctionne correctement et renvoie la liste des catégories de produits. J'essaie maintenant d'obtenir une liste de produits pour une catégorie particulière.
Exemple: récupère tous les produits pour avec cat_id=34
.
Je sais que les produits sont stockés sous forme de publications, et j'ai essayé de le faire, mais cela me semble impossible.
Comment puis-je obtenir la liste des produits pour une catégorie particulière?
<?php
$args = array(
'post_type' => 'product',
'posts_per_page' => 10,
'product_cat' => 'hoodies'
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
global $product;
echo '<br /><a href="'.get_permalink().'">' . woocommerce_get_product_thumbnail().' '.get_the_title().'</a>';
endwhile;
wp_reset_query();
?>
Cela listera toutes les vignettes et tous les noms de produits, ainsi que leurs liens vers la page du produit. changez le nom de la catégorie et posts_per_page selon vos besoins.
<?php
$args = array( 'post_type' => 'product', 'category' => 34, 'posts_per_page' => -1 );
$products = get_posts( $args );
?>
Cela devrait prendre tous les produits que vous voulez, le type de message que je publie peut être faux, mais je ne me souviens plus très bien de ce que woo-commerce utilise pour ce type de message. Il retournera une gamme de produits
N'utilisez pas WP_Query()
ou get_posts()
. De la doc WooCommerce:
wc_get_products et WC_Product_Query fournissent un moyen standard de récupération de produits sûrs à utiliser et ne seront pas endommagés en raison de modifications de la base de données dans les futures versions de WooCommerce. Construire des requêtes WP_Queries ou de base de données personnalisées risque de briser votre code dans les versions futures de WooCommerce, car les données se déplacent vers les tables personnalisées pour améliorer les performances.
Vous pouvez récupérer les produits que vous voulez comme ceci:
$args = array(
'category' => array( 34 ),
'orderby' => 'name',
);
$products = wc_get_products( $args );
Toujours utiliser tax_query pour obtenir des publications/produits d'une catégorie particulière ou de toute autre taxonomie. Vous pouvez également obtenir les produits en utilisant un identifiant/slug de taxonomie particulière ...
$the_query = new WP_Query( array(
'post_type' => 'product',
'tax_query' => array(
array (
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'accessories',
)
),
) );
while ( $the_query->have_posts() ) :
$the_query->the_post();
the_title(); echo "<br>";
endwhile;
wp_reset_postdata();