Mostrar Todos los Productos por Categoría con WooCommerce

25 mar 2014, 22:40:32
Vistas: 96.4K
Votos: 14

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>';
    }
}
?> 
5
Comentarios

Solo necesitas un bucle de bucles. Dentro de tu foreach(), ejecuta un nuevo WP_Query() para obtener todos los productos en ese término... y luego itera a través de ellos.

helgatheviking helgatheviking
25 mar 2014 23:09:44

Creo que entiendo cómo hacer esto, pero no puedo encontrar nada sobre cómo listar productos por categoría con PHP (todo lo que encuentro son tonterías de shortcode). Si puedes mostrarme cómo se ve ese código, debería poder resolver el resto.

JacobTheDev JacobTheDev
25 mar 2014 23:23:11

No necesitas un shortcode, listar productos por categoría es solo una Consulta de Taxonomía.

helgatheviking helgatheviking
25 mar 2014 23:29:26

Sabía que no necesitaba un shortcode, solo estaba diciendo que era todo lo que podía encontrar, lo cual no fue de ayuda. Ese enlace que proporcionaste parece prometedor, lo intentaré mañana y te informaré, gracias.

JacobTheDev JacobTheDev
26 mar 2014 00:04:23

Ok. Si aún tienes problemas, edita tu pregunta con tu nuevo intento de código y le echaré un vistazo.

helgatheviking helgatheviking
26 mar 2014 01:02:39
Todas las respuestas a la pregunta 1
4
26

¡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>";
    }
}
26 mar 2014 18:28:48
Comentarios

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.

helgatheviking helgatheviking
26 mar 2014 19:16:36

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

Alyssa Reyes Alyssa Reyes
6 mar 2016 07:57:48

@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?

JacobTheDev JacobTheDev
7 mar 2016 16:28:47

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."

UncaughtTypeError UncaughtTypeError
5 jul 2019 16:07:39