Пользовательский цикл Woocommerce для отображения всех товаров

5 июн. 2013 г., 11:06:38
Просмотры: 73.2K
Голосов: 2

Я сейчас работаю над сайтом электронной коммерции и столкнулся с проблемой. Мой клиент хочет страницу e-boutique со всеми отображаемыми категориями товаров, за которыми следуют три продвигаемых товара и кнопка "показать все".

Эта кнопка "Показать все" должна отображать все товары, которые есть в магазине, с настройками сортировки и постраничной навигации WooCommerce по умолчанию.

Во-первых, я не уверен, правильно ли я это делаю. На данный момент у меня есть страница, показывающая категории товаров, и когда на этой странице я нажимаю кнопку "показать все", я перезагружаю страницу с аргументом GET /?all=1 и отображаются товары.

<a class="product-category-view-all" href="?all=1"><?php _e('Показать все'); ?></a>

Я скопировал идею из этого поста, и вот мой код:

<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'); // сортировка 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; // конец цикла
        wp_reset_query(); 
        ?>
    </ul>
    <div class="clear"></div>

    <?php do_action('woocommerce_after_shop_loop'); // пагинация woocommerce ?>

    <?php
}
else
{
    // Код для отображения категорий товаров с миниатюрами.
}
?>

Товары отображаются правильно, и селект для сортировки виден. Когда я хочу изменить сортировку, страница перезагружается, но порядок не меняется, а постраничная навигация установлена на 3 товара на странице, но это не соблюдается (кнопки постраничной навигации не отображаются).

Хочу добавить, что это мой первый сайт с использованием WordPress и WooCommerce.

2
Комментарии

Эй, ты нашел ответ на этот вопрос? Если да, пожалуйста, поделись. Буду очень признателен. Спасибо.

Devner Devner
14 июн. 2013 г. 18:50:09

Вот более подходящий пост для копирования :) https://cfxdesign.com/create-a-custom-woocommerce-product-loop-the-right-way/

cfx cfx
24 мая 2018 г. 22:02:00
Все ответы на вопрос 2
1

Я не полностью решил свою проблему. Мой клиент передумал и больше не хотел сортировки.

Что касается пагинации, мне удалось заставить её работать, добавив новый аргумент в мой запрос. Вот код, который сработал для меня:

<?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
            // Мне больше не нужна сортировка
            //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; // конец цикла.   ?>
            </ul>

            <?php
            /*  пагинация 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
    {
        // Код для отображения категорий товаров с миниатюрами.
    }
?>

Переменная $paged помогает мне получить текущую страницу, переданную в URL через GET.

Ещё раз, я не знаю, является ли это лучшим способом сделать это. Но это сработало для меня.

Надеюсь, это поможет кому-то.

14 июн. 2013 г. 19:49:05
Комментарии

woocommerce_get_template_part устарел начиная с версии 3.0 ... используйте wc_get_template_part вместо него ... Вы также можете использовать условный оператор if, чтобы ваш код поддерживал как старые, так и новые версии WooCommerce

Kolawole Emmanuel Izzy Kolawole Emmanuel Izzy
10 дек. 2019 г. 21:08:00
0

В вашем массиве $args вы можете добавить 'posts_per_page' => -1, чтобы показать все товары. Результат будет выглядеть так:

$args = array(
    'post_type' => 'product', // Тип записи - товар
    'paged' => $paged, // Номер страницы
    'posts_per_page' => -1 // Показать все товары
);
16 сент. 2014 г. 22:09:47