Loop personalizado de Woocommerce para mostrar todos los productos
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.

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.
