Buclă personalizată Woocommerce pentru afișarea tuturor produselor

5 iun. 2013, 11:06:38
Vizualizări: 73.2K
Voturi: 2

În prezent lucrez la un site de ecommerce și am întâmpinat o problemă. Clientul meu dorește o pagină e-boutique cu toate categoriile de produse afișate, urmată de trei produse promovate și un buton "arată toate".

Acest buton "Arată toate" ar trebui să afișeze toate produsele pe care le conține magazinul cu sortarea și paginarea implicită WooCommerce.

În primul rând, nu știu dacă procedez corect. Până acum am pagina care arată categoriile de produse și când fac click pe butonul "arată toate", reîncarc pagina cu un argument GET /?all=1 și am produsele afișate.

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

Am copiat ideea din această postare, și aici este codul meu:

<div id="content" class="hfeed">
<h1><?php _e('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'); // sortare 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; // sfârșitul buclei 
        wp_reset_query(); 
        ?>
    </ul>
    <div class="clear"></div>

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

    <?php
}
else
{
    // Cod pentru afișarea categoriilor de produse cu miniaturi.
}
?>

Produsele sunt bine afișate și selectorul pentru sortare este vizibil. Când vreau să schimb sortarea, pagina este reîncărcată dar ordinea nu se schimbă și paginarea este setată la 3 produse per pagină dar nu este respectată. (butoanele de paginare nu sunt afișate).

Aș dori să adaug că este primul meu website folosind WordPress și WooCommerce.

2
Comentarii

Hei, ai găsit vreun răspuns pentru asta? Dacă da, te rog să îl împărtășești. Aș aprecia foarte mult. Mulțumesc.

Devner Devner
14 iun. 2013 18:50:09

Iată un post mai bun de pe care poți copia :) https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

cfx cfx
24 mai 2018 22:02:00
Toate răspunsurile la întrebare 2
1

Nu am rezolvat în întregime problema mea. Clientul meu și-a schimbat părerea și nu a mai dorit sortarea.

În ceea ce privește paginarea, am reușit să o fac să funcționeze prin adăugarea unui nou argument în interogarea mea, iată codul care a funcționat pentru mine:

<?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
            // Nu mai vreau sortarea
            //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; // sfârșitul buclei.   ?>
            </ul>

            <?php
            /*  paginare 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
    {
        // Cod pentru afișarea categoriilor de produse cu imagini miniatură.
    }
?>

Variabila $paged mă ajută să obțin pagina curentă transmisă în URL prin GET.

Din nou, nu știu dacă este cea mai bună metodă de a face acest lucru. Dar a funcționat pentru mine.

Sper că poate ajuta pe cineva.

14 iun. 2013 19:49:05
Comentarii

woocommerce_get_template_part este învechit începând cu versiunea 3.0 ... folosește wc_get_template_part în loc ... De asemenea, poți folosi o instrucțiune if pentru a face ca codul tău să funcționeze atât cu versiuni mai vechi, cât și cu cele mai noi de woocommerce

Kolawole Emmanuel Izzy Kolawole Emmanuel Izzy
10 dec. 2019 21:08:00
0

În array-ul tău $args, ar trebui să poți adăuga 'posts_per_page' => -1 pentru a afișa toate produsele. Rezultatul ar arăta astfel:

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