it-swarm.dev

Loop personalizzato Woocommerce per mostrare tutti i prodotti

Attualmente sto lavorando a un sito di e-commerce e ho incontrato un problema. Il mio cliente desidera una pagina di e-boutique con tutte le categorie di prodotti visualizzate, seguita da tre prodotti promossi e un pulsante "mostra tutto".

Questo pulsante "Mostra tutto" dovrebbe mostrare tutto il prodotto che il negozio contiene con l'ordinamento e il paging woocommerce predefiniti.

Prima di tutto, non so che lo sto facendo nel modo giusto. Quello che ho finora è la pagina che mostra le categorie di prodotto e quando su questa pagina faccio clic sul pulsante "Mostra tutto", ricarico la pagina con un argomento GET/?all=1 e visualizzo il prodotto.

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

Ho copiato l'idea da questo post , ed ecco il mio codice:

<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.
}
?>

I prodotti sono ben visualizzati e la selezione per l'ordinamento è visibile. Quando voglio cambiare l'ordinamento, la pagina viene ricaricata ma l'ordine non viene modificato e l'impaginazione è impostata su 3 prodotti per pagina, ma non viene rispettata. (i pulsanti di paging non sono visualizzati).

Vorrei aggiungere che è il mio primo sito Web che utilizza WordPress e WooCommerce.

2
HamzStramGram

Non ho risolto completamente il mio problema. Il mio cliente ha cambiato idea e non voleva più l'ordinamento.

Ma per quanto riguarda il paging, 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
            // 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 variabile $paged mi aiuta a far passare la pagina corrente nell'URL tramite GET.

Ancora una volta, non so se è il modo migliore per farlo. Ma ha fatto il lavoro per me.

Spero possa aiutare qualcuno.

4
HamzStramGram

Nel tuo array $ args, dovresti essere in grado di 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
);
1
Rynoceris