Mostrar todos los productos por categoría con WooCommerce

13

Con WooCommerce, quiero mostrar todas las categorías en una tienda como encabezados, con todos sus productos listados a continuación en una lista desordenada. ¿Es posible hacerlo? He visto algunas cosas que me permitirán mostrar una lista de categorías o una lista de productos para una categoría específica, pero nada que recorra todo de la manera que describí.

Esto es lo que estoy usando actualmente para enumerar todas las categorías:

<?php
$args = array(
    'number'     => $number,
    'orderby'    => $orderby,
    'order'      => $order,
    '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 . '</h4>';
    }
}
?> 
JacobTheDev
fuente
Simplemente necesita un bucle de bucles. Dentro de su foreach(), ejecute un nuevo WP_Query()para obtener todos los productos en ese término ... y luego repítalos.
helgatheviking
Creo que entiendo cómo hacer esto, pero no puedo encontrar nada acerca de enumerar productos por categoría con PHP (todo lo que puedo encontrar es un sinsentido de código corto). Si puede mostrarme cómo se ve ese código, debería poder averiguar el resto.
JacobTheDev
2
No necesita un código corto, enumerar productos por categoría es solo una consulta de impuestos .
helgatheviking
Sabía que no necesitaba un código corto, estaba diciendo que eso era todo lo que podía encontrar, lo cual fue inútil. El enlace que proporcionó parece prometedor, lo intentaré mañana e informaré, gracias.
JacobTheDev
1
Okay. Si todavía está atascado, edite su pregunta con su nuevo intento de codificación y lo echaré un vistazo.
helgatheviking

Respuestas:

25

¡Lo averigué! ¡El siguiente código enumera automáticamente todas las categorías y las publicaciones 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>";
    }
}
JacobTheDev
fuente
Agradable. Si quiere volverse realmente loco, es posible que desee buscar en la API de transitorios ... eso ayudaría a evitar que ejecute tantas consultas en cada carga de página.
helgatheviking
¿Cómo puedo obtener las imágenes en miniatura de cada categoría?
Alyssa Reyes
Las categorías de @AlyssaReyes no tienen inherentemente miniaturas; ¿Configuró un campo personalizado para sus categorías para esto? ¿Podría publicar esto en una nueva pregunta con más detalles y enviarme el enlace para que pueda entender mejor?
JacobTheDev
1
Gracias hombre, me ahorraste algo de tiempo y me pusiste en la dirección correcta. La única forma en que podría mejorar esta respuesta es usar la clase de consulta integrada de WooCommerce:, en WC_Product_Querylugar de WP_Query, luego use un foreachbucle en lugar de un whilebucle. Por razones, consulte la documentación de Github para la consulta: github.com/woocommerce/woocommerce/wiki/… , pero lo esencial es:> "las consultas WP_Queries personalizadas pueden romper su código en futuras versiones de WooCommerce como datos se mueve hacia tablas personalizadas para un mejor rendimiento ".
UncaughtTypeError