Loop personalizado de Woocommerce para mostrar todos los productos

5 jun 2013, 11:06:38
Vistas: 73.2K
Votos: 2

Actualmente estoy trabajando en un sitio web de comercio electrónico y me encontré con un problema. Mi cliente quiere una página e-boutique con todas las categorías de productos mostradas, seguidas de tres productos promocionados y un botón "mostrar todo".

Este botón "Mostrar todo" debe mostrar todos los productos que contiene la tienda con el ordenamiento y la paginación predeterminada de WooCommerce.

En primer lugar, no sé si lo estoy haciendo de la manera correcta. Lo que tengo hasta ahora es la página mostrando las categorías de productos y cuando en esta página hago clic en el botón "mostrar todo", recargo la página con un argumento GET /?all=1 y tengo los productos mostrados.

<a class="product-category-view-all" href="?all=1"><?php _e('Ver todo'); ?></a>

Copié la idea de esta publicación, y aquí está mi código:

<div id="content" class="hfeed">
<h1><?php _e('La E-boutique'); ?></h1>

<?php
if (isset($_GET['all']))
{
    $args = array(
        'post_type' => 'product',
        'orderby' => $orderby,
    );
    $wp_query = new WP_Query($args);
    ?>

    <?php do_action('woocommerce_before_shop_loop'); // ordenamiento de woocommerce ?>

    <div class="clear"></div>
    <ul class="products-list">
        <?php woocommerce_product_subcategories(); ?>

        <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>

            <?php woocommerce_get_template_part('content', 'product'); ?>

            <?php
        endwhile; // fin del loop 
        wp_reset_query(); 
        ?>
    </ul>
    <div class="clear"></div>

    <?php do_action('woocommerce_after_shop_loop'); // paginación de woocommerce   ?>

    <?php
}
else
{
    // Código para mostrar las categorías de productos con miniaturas.
}
?>

Los productos se muestran bien y el selector para el ordenamiento es visible. Cuando quiero cambiar el ordenamiento, la página se recarga pero el orden no cambia y la paginación está configurada para 3 productos por página pero no se respeta. (los botones de paginación no se muestran).

Me gustaría agregar que es mi primer sitio web usando WordPress y WooCommerce.

2
Comentarios

Oye, ¿encontraste alguna respuesta para esto? Si es así, por favor compártela. Sería muy apreciado. Gracias.

Devner Devner
14 jun 2013 18:50:09

Aquí hay una mejor publicación para copiar :) https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

cfx cfx
24 may 2018 22:02:00
Todas las respuestas a la pregunta 2
1

No resolví completamente mi problema. Mi cliente cambió de opinión y ya no quería el ordenamiento.

Pero con respecto a la paginación, logré que funcionara agregando un nuevo argumento en mi consulta, aquí está el código que hizo que funcionara para mí:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $args = array(
        'post_type' => 'product',
        'paged' => $paged,
    );
    $wp_query = new WP_Query($args);

    if (isset($_GET['all']))
    {
        ?>

        <?php do_action('woocommerce_archive_description'); ?>

        <?php if (have_posts()) : ?>

            <?php
            // Ya no quiero el ordenamiento
            //do_action('woocommerce_before_shop_loop');
            ?>

            <ul class = "products-list">
                <?php while (have_posts()) : the_post(); ?>

                    <?php woocommerce_get_template_part('content', 'product'); ?>

                <?php endwhile; // fin del ciclo.   ?>
            </ul>

            <?php
            /*  paginación de woocommerce  */
            do_action('woocommerce_after_shop_loop');
            ?>

        <?php elseif (!woocommerce_product_subcategories(array('before' => woocommerce_product_loop_start(false), 'after' => woocommerce_product_loop_end(false)))) : ?>

            <?php woocommerce_get_template('loop/no-products-found.php'); ?>

        <?php endif; ?>
        <?php
    }
    else
    {
        // Código para mostrar las categorías de productos con miniaturas.
    }
?>

La variable $paged me ayuda a obtener la página actual pasada en la URL mediante GET.

Una vez más, no sé si es la mejor manera de hacerlo. Pero funcionó para mí.

Espero que pueda ayudar a alguien.

14 jun 2013 19:49:05
Comentarios

woocommerce_get_template_part está obsoleto desde la versión 3.0 ... usa wc_get_template_part en su lugar ... También puedes usar una declaración condicional if para que tu código sea compatible con versiones antiguas y nuevas de WooCommerce

Kolawole Emmanuel Izzy Kolawole Emmanuel Izzy
10 dic 2019 21:08:00
0

En tu arreglo $args, puedes agregar 'posts_per_page' => -1 para mostrar todos los productos. El resultado se vería así:

$args = array(
    'post_type' => 'product',
    'paged' => $paged,
    'posts_per_page' => -1
);
16 sept 2014 22:09:47