Loop personalizzato di Woocommerce per mostrare tutti i prodotti
Sto attualmente lavorando su un sito di e-commerce e ho incontrato un problema. Il mio cliente vuole una pagina e-boutique con tutte le categorie di prodotti visualizzate, seguite da tre prodotti in evidenza e un pulsante "mostra tutti".
Questo pulsante "Mostra tutti" dovrebbe mostrare tutti i prodotti presenti nel negozio con l'ordinamento e la paginazione predefiniti di WooCommerce.
Prima di tutto, non so se lo sto facendo nel modo giusto. Finora ho una pagina che mostra le categorie di prodotti e quando clicco sul pulsante "mostra tutti", ricarico la pagina con un argomento GET
/?all=1
e vengono visualizzati i prodotti.
<a class="product-category-view-all" href="?all=1"><?php _e('Mostra tutti'); ?></a>
Ho copiato l'idea da questo post, ed ecco il mio codice:
<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'); // ordinamento 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; // fine del loop
wp_reset_query();
?>
</ul>
<div class="clear"></div>
<?php do_action('woocommerce_after_shop_loop'); // paginazione woocommerce ?>
<?php
}
else
{
// Codice per visualizzare le categorie di prodotti con miniature.
}
?>
I prodotti vengono visualizzati correttamente e il selettore per l'ordinamento è visibile. Quando voglio cambiare l'ordinamento, la pagina viene ricaricata ma l'ordine non cambia e la paginazione è impostata su 3 prodotti per pagina ma non viene rispettata (i pulsanti di paginazione non vengono visualizzati).
Vorrei aggiungere che questo è il mio primo sito web utilizzando WordPress e WooCommerce.

Non ho risolto completamente il mio problema. Il mio cliente ha cambiato idea e non vuole più l'ordinamento.
Ma riguardo all'impaginazione, sono riuscito a farlo funzionare aggiungendo un nuovo argomento nella mia query, ecco il codice che ha funzionato per me:
<?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
// Non voglio più l'ordinamento
//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; // fine del loop. ?>
</ul>
<?php
/* paginazione 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
{
// Codice per visualizzare le categorie di prodotti con miniature.
}
?>
La variabile $paged
mi aiuta a ottenere la pagina corrente passata nell'URL tramite GET.
Ancora una volta, non so se sia il modo migliore per farlo. Ma ha funzionato per me.
Spero che possa aiutare qualcuno.
