• Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Вывод всех товаров по кнопке "показать всё"

Boomer161

Новичок
Здравствуйте!

Появилась проблема. Раньше её не было.
Есть сайт с Woocommerce 2.6.14
WordPress 4.7.3
Использую стандартный шаблон и тему Shopper Responsive WordPress Woocommerce Theme.

На главной странице сайта выводится по умолчанию 9 товаров и кнопка "Показать ещё". При клике на эту кнопку ничего не происходит. При наведении на кнопку отображается ссылка вида https://мойсайт.ру/page/2/ По прямой ссылке эта страница открывается, но на ней отображаются не все товары, а следующие 9. Есть ещё ссылка вида https://мойсайт.ру/page/3/ - там соответвенно выводится остальные товары.

Если залогониться в панели администрирования и зайти в раздел "Внешний вид" -> "Настроить", то там при клике по кнопке в этом же окне при клике по кнопке "Показать ещё" отображаются следующие 9, вместо тех, что на главной по умолчанию...

Подскажите, пожалуйста, как решить проблему? Нужно сделать так, чтоб при клике по кнопке подгружались следующие товары. Где и что нужно исправить, куда копать?

Заранее спасибо.
 

qwer

Специалист
Местный
Добрый день.

Файл в котором нужно работать:

Код:
“/wp-content/plugins/woocommerce/templates/loop/pagination.php”
Лучше перенести его в папку со своей темой
Код:
“/wp-content/themes/[Ваша_тема]/woocommerce/loop/pagination.php”

Возможно вам поможет следующее решение:

Следующий код HTML добавляем к ссылке «Смотреть всё»:
HTML:
<?php if (is_paged()) : ?>
  <div style="float: right"><a href="../../?view=all">Смотреть всё</a></div>
<?php else: ?>
  <div style="float: right"><a href="?view=all">Смотреть всё</a></div>
<?php endif; ?>

Далее полный кусочек кода с тегами <nav> после модификации:

HTML:
<nav class="woocommerce-pagination">

  <?php
    echo paginate_links( apply_filters( 'woocommerce_pagination_args', array(
      'base'        => str_replace( 999999999, '%#%', get_pagenum_link( 999999999 ) ),
      'format'      => '',
      'current'     => max( 1, get_query_var('paged') ),
      'total'       => $wp_query->max_num_pages,
      'prev_text    => '&larr;',
      'next_text    => '&rarr;',
      'type'        => 'list',
      'end_size     => 3,
      'mid_size     => 3
    ) ) );
  ?>
  <?php if (is_paged()) : ?>
    <div style="float: right"><a href="../../?view=all">Смотреть всё</a></div>
  <?php else: ?>
    <div style="float: right"><a href="?view=all">Смотреть всё</a></div>
  <?php endif; ?>
</nav>

Достичь того, чтобы выводились все товары по ссылке "Смотреть всё" можно с помощью следующего кода

Добавлять в файл function.php вашей темы:

PHP:
//Количество товаров для вывода на странице магазина
add_filter('loop_shop_per_page', 'wg_view_all_products');

function wg_view_all_products(){
    if($_GET['view'] === 'all'){
        return '9999';
    }
}

Этот код и сообщит вашей пагинации что нужно выводить все товары на одной странице. Если у вас более 9999 товаров на сайте, добавьте ещё одну 9, чтобы быть уверенным что все товары выведутся на одной странице.
Теперь у вас будет ссылка в вашей пагинации, которая будет перезагружать страницу, отображая все товары.

Рекомендую добавить так же кнопку "Назад", чтобы посетитель сайта не кликал кнопку браузера
Сразу над кодом навигации HTML поставьте условие, которое требует следующего кода сразу после него:

PHP:
if( $_GET['view'] === 'all' ) { ?>
  <div style="float: right"><a href=".">Смотреть постранично</a></div>
<?php }

Модифицируем прошлый шаг добавляя код

PHP:
global $wp_query;
if( $_GET['view'] === 'all' ) { ?>
  <div id="wg-view-all"><a href=".">Смотреть постранично</a></div>
<?php }
if ( $wp_query->max_num_pages <= 1 )
  return;
?>
<nav class="woocommerce-pagination">

Должна появиться ссылка "Смотреть постранично" при просмотре всех товаров на одной странице.

Надеюсь, смогла помочь.
 

qwer

Специалист
Местный
Кстати, можете поправить вывод количества товаров так же, через файл function.php вашей темы, с помощью следующего кода
PHP:
add_filter('loop_shop_per_page', create_function('$cols', 'return 12;'));

//если у вас по 4 товара в ряд, заполнятся все ряды
//подбирайте необходимое количество для одной страницы редактируя return
 

reset

Новичок
Кстати, можете поправить вывод количества товаров так же, через файл function.php вашей темы, с помощью следующего кода
PHP:
add_filter('loop_shop_per_page', create_function('$cols', 'return 12;'));

//если у вас по 4 товара в ряд, заполнятся все ряды
//подбирайте необходимое количество для одной страницы редактируя return

Спасибо. Помогло
 
Сверху Снизу