Показать все товары на одной странице в WooCommerce

26 февр. 2013 г., 00:01:46
Просмотры: 59.5K
Голосов: 4

У меня работает WooCommerce на этом магазине.

Хотя по умолчанию отображается 12 товаров на странице, клиент попросил добавить кнопку "показать все", чтобы пользователю не приходилось использовать пагинацию для просмотра остальных товаров.

Есть ли функция, которую я могу запустить на текущей странице, чтобы повторно выполнить цикл, но изменить запрос для вывода большего количества 'записей на страницу'? Я просмотрел файлы шаблонов WooCommerce, но не очевидно, как это сделать.

Я думал передать PHP переменную GET на текущую страницу и просто проверять её наличие для определения необходимости выполнения модифицированного запроса, примерно так (вне цикла):

<a href="<?php 
echo get_permalink( $post->ID ) . "?showall=1"; 
?>">Показать все</a>

А затем добавить что-то вроде этого перед циклом файлов шаблона

<?php if($_GET['showall'] = 1){ //что-то здесь для модификации запроса (wp_query возможно?? или фильтр woocommerce) } ?>
//цикл как обычно

Я на правильном пути? Легко ли этого достичь таким способом? Буду признателен за любые указания по реализации.

Редактирование: Хорошо, я немного покопался в шаблонах WooCommerce. Похоже, что archive-product.php - это файл, который я хотел бы переопределить.

Сейчас я уже указываю количество товаров на странице с помощью фильтра в functions.php моей темы следующим образом:

add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ), 20 );

И я добавил эту строку в файл archive-product.php, который я скопировал в папку_моей_темы/woocommerce для переопределения значения по умолчанию:

        <?php if($_GET['showall']==1){ 
            add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 8;' ), 30 ); 
        } ?>

Когда я затем посещаю shop_page/?showall=1, фильтр не срабатывает. Фильтр в functions.php, похоже, доминирует, несмотря на более низкий приоритет.

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

Вы проверили документацию WooCommerce? http://wcdocs.woothemes.com/snippets/change-number-of-products-displayed-per-page/

ronald ronald
26 февр. 2013 г. 01:32:27
Все ответы на вопрос 3
0

Просто добавьте условную проверку в ваш файл functions.php:

if( isset( $_GET['showall'] ) ){ 
    add_filter( 'loop_shop_per_page', create_function( '$cols', 'return -1;' ) ); 
} else {
    add_filter( 'loop_shop_per_page', create_function( '$cols', 'return 12;' ) );
}
26 февр. 2013 г. 03:57:41
0

Опоздал на вечеринку, но если вам не нужно учитывать PHP 5.2, безопаснее и эффективнее использовать замыкание:

add_filter( 'loop_shop_per_page', function ( $cols ) {
    return - 1;
} );

(Смотрите руководство по PHP о create_function.)

3 мар. 2016 г. 18:54:52
0

Только что прочитал вашу тему,

Я создал плагин для этого, чтобы добавить выпадающий список, позволяющий посетителю выбирать количество товаров, которые он хочет видеть.

http://wordpress.org/plugins/woocommerce-products-per-page/

Надеюсь, это поможет в вашей ситуации.

8 мар. 2014 г. 12:49:39