Bucle personalizado de Woocommerce para mostrar todos los productos [cerrado]

2

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

Este botón "Mostrar todo" se supone que muestra todo el producto que contiene la tienda con la clasificación y paginación predeterminadas de woocommerce.

En primer lugar, no lo sé, lo estoy haciendo de la manera correcta. Lo que tengo hasta ahora es la página que muestra 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 argumento /?all=1 y se muestra el producto.

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

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

<div id="content" class="hfeed">
<h1><?php _e('The 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'); // woocommerce sorting ?>

    <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; // end of the loop. 
        wp_reset_query(); 
        ?>
    </ul>
    <div class="clear"></div>

    <?php do_action('woocommerce_after_shop_loop'); // woocommerce pagination   ?>

    <?php
}
else
{
    // Code to display the product categories with thumbnails.
}
?>

Los productos se muestran bien y la selección para la clasificación es visible. Cuando quiero cambiar la clasificación, la página se vuelve a cargar pero el orden no se modifica y la paginación se establece en 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 con WordPress y WooCommerce.

    
pregunta HamzStramGram 05.06.2013 - 10:06

2 respuestas

4

No resolví por completo mi problema. Mi cliente cambió de opinión y ya no quería más la clasificación.

Pero con respecto a la paginación, logré que funcionara agregando un nuevo argumento en mi consulta, aquí está el código que lo hizo funcionar 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
            // I don't want the sorting anymore
            //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; // end of the loop.   ?>
            </ul>

            <?php
            /*  woocommerce pagination  */
            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
    {
        // Code to display the product categories with thumbnails.
    }
?>

La variable $paged me ayuda a pasar la página actual en la URL a través de GET.

Una vez más, no sé si es la mejor manera de hacerlo. Pero hizo el trabajo por mí.

Espero que pueda ayudar a alguien.

    
respondido por el HamzStramGram 14.06.2013 - 18:49
1

En su matriz $ args, debería poder 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
);
    
respondido por el Rynoceris 16.09.2014 - 21:09

Lea otras preguntas en las etiquetas