Mostrar Todos los Productos por Categoría con WooCommerce
Con WooCommerce, quiero mostrar todas las categorías de una tienda como encabezados, con todos sus productos listados debajo en una lista desordenada. ¿Es esto posible? He visto algunas opciones que permiten mostrar una lista de categorías o una lista de productos para una categoría específica, pero nada que permita recorrer todo de la manera que describí.
Esto es lo que estoy usando actualmente para listar todas las categorías:
<?php
$args = array(
'number' => $number, // número de categorías a mostrar
'orderby' => $orderby, // ordenar por
'order' => $order, // orden (ASC/DESC)
'hide_empty' => $hide_empty, // ocultar categorías vacías
'include' => $ids // IDs de categorías a incluir
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
foreach ( $product_categories as $product_category ) {
echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</h4>';
}
}
?>

¡Lo resolví! El código a continuación lista automáticamente todas las categorías y los posts de cada categoría.
$args = array(
'number' => $number,
'orderby' => 'title',
'order' => 'ASC',
'hide_empty' => $hide_empty,
'include' => $ids
);
$product_categories = get_terms( 'product_cat', $args );
$count = count($product_categories);
if ( $count > 0 ){
foreach ( $product_categories as $product_category ) {
echo '<h4><a href="' . get_term_link( $product_category ) . '">' . $product_category->name . '</a></h4>';
$args = array(
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
// 'terms' => 'white-wines'
'terms' => $product_category->slug
)
),
'post_type' => 'product',
'orderby' => 'title,'
);
$products = new WP_Query( $args );
echo "<ul>";
while ( $products->have_posts() ) {
$products->the_post();
?>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
</li>
<?php
}
echo "</ul>";
}
}

Genial. Si quieres llevar esto al siguiente nivel, podrías considerar usar la API de Transients... eso te ayudaría a evitar ejecutar tantas consultas en cada carga de página.

¿Cómo puedo obtener las miniaturas de imágenes para cada categoría?

@AlyssaReyes las categorías no tienen miniaturas por defecto; ¿configuraste un campo personalizado para tus categorías con este propósito? ¿Podrías publicar esto en una nueva pregunta con más detalles y enviarme el enlace para que pueda entenderlo mejor?

Gracias hermano, me ahorraste tiempo y me orientaste en la dirección correcta. La única forma en que podría mejorar esta respuesta es usando la clase de consulta integrada de WooCommerce: WC_Product_Query
, en lugar de WP_Query
, y luego usar un bucle foreach
en vez de un bucle while
. Para entender las razones, puedes revisar la documentación en Github de la consulta: https://github.com/woocommerce/woocommerce/wiki/wc_get_products-and-WC_Product_Query#description, pero en resumen es: > "usar WP_Queries personalizadas probablemente romperá tu código en futuras versiones de WooCommerce ya que los datos se están moviendo hacia tablas personalizadas para mejor rendimiento."
