Loop personalizzato di Woocommerce per mostrare tutti i prodotti

5 giu 2013, 11:06:38
Visualizzazioni: 73.2K
Voti: 2

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.

2
Commenti

Ehi, hai mai trovato una risposta a questo? Se sì, per favore condividila. Sarebbe molto apprezzato. Grazie.

Devner Devner
14 giu 2013 18:50:09

Ecco un post migliore da cui copiare :) https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

cfx cfx
24 mag 2018 22:02:00
Tutte le risposte alla domanda 2
1

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.

14 giu 2013 19:49:05
Commenti

woocommerce_get_template_part è deprecato dalla versione 3.0... utilizza invece wc_get_template_part... Puoi anche usare un'istruzione if per far sì che il tuo codice supporti sia le versioni più vecchie che quelle più recenti di WooCommerce

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

Nel tuo array $args, dovresti poter aggiungere 'posts_per_page' => -1 per mostrare tutti i prodotti. Il risultato sarebbe simile a questo:

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