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

Страница выделенных товаров и товаров со скидкой

m-bazhenov

Новичок
Привет! Возможно, тут кому-нибудь пригодится мой небольшой опыт в Woocommerce.
Итак была задача сделать две страницы. На одной должны были быть все товары со скидкой, на другой все "выделенные" (feature) товары. Так как моя тема криво отображает Woocommerce, дополнительная задача вывести все товары в стилях Woocommerce.

Реализация:
Копируем в папку дочерней темы файл archive-product.php и называем его sale.php, второй файл - называем feature.php.
Указываем внутри файлов, что это новые шаблоны:
1. *Template name: Sale;
2. *Template name: Feature".

Далее находим в файле вот эту строку:
PHP:
<?php wc_get_template_part( 'content', 'product' ); ?>

И меняем ее. Для страницы, на которой будут выводится все товары со скидкой:
PHP:
$args = array(
                            'post_type' => 'product',
                            'posts_per_page' => 30, //тут указываем количество товаров на странице
                            'meta_query' => array(
                            'relation' => 'OR',
                                array( // Simple products type
                                'key' => '_sale_price',
                                'value' => 0,
                                'compare' => '>',
                                'type' => 'numeric'
                                ),
                                )
                                );
                        $loop = new WP_Query( $args );
                        if ( $loop->have_posts() ) {
                        while ( $loop->have_posts() ) : $loop->the_post();
                        wc_get_template_part( 'content', 'product' );
                        endwhile;
                        } else {
                        echo __( 'No products found' );
                        }
                        wp_reset_postdata();
                        ?>

Для страницы, на которой будут выводится все feature товары:
PHP:
$args = array(
                            'post_type' => 'product',
                            'posts_per_page' => 30,
                            'meta_query' => array(
                            'relation' => 'OR',
                                array(
                                'key' => '_featured',
                                'value' => 'yes',
                                ),
                                )
                                );
                        $loop = new WP_Query( $args );
                        if ( $loop->have_posts() ) {
                        while ( $loop->have_posts() ) : $loop->the_post();
                        wc_get_template_part( 'content', 'product' );
                        endwhile;
                        } else {
                        echo __( 'No products found' );
                        }
                        wp_reset_postdata();
                        ?>

Далее нужно создать две страницы на сайте и для одной из них в шаблонах выбрать Sale, а для другой Feature.
Как и почему это работает я представляю только поверхностно, но это работает.

Замечания:
Код вывода товаров для страницы Sale работает только с Simple products, но в интернете можно легко найти его модификацию для вариативных товаров и даже для вывода товаров в определенном ценовом диапозоне и пр. Тут Google в помощь.

Есть небольшой затык с title, если его не править он выводит на странице название страницы магазина. Как сделать так, чтобы выводил название нужной страницы, я не знаю. Возможно, кто-то здесь подскажет.

P.S. Забыл про еще один затык. На страницах Sale и Feature почему-то не выводятся два поля:
1. Сортировка;
2. Показ количества товаров.
Хотя формально вроде бы должны, потому как код, отвечающий за их выход, остается не тронутым.
 
Последнее редактирование:

m-bazhenov

Новичок
Небольшое дополнение: решение проблемы с некорректным отображением названия страниц.

В файл functions.php необходимо добавить следующий код:
PHP:
add_filter( 'woocommerce_page_title', 'wc_custom_shop_archive_title');  // Меняем название страницы
function wc_custom_shop_archive_title( $page_title ) {
    if ( is_page(ID) ) { // подставляем значение ID страницы Sale
    $page_title = "Sale";} // меняем ее заголовок
    elseif ( is_page(ID) ) { // подставляем значение ID страницы Feature
    $page_title = "Feature";} // меняем ее заголовок
    return $page_title;
}

Осталось понять, почему не выводятся поля "Сортировка" и "Показ количества товаров".
Кто-нибудь сможет помочь?

P.S. За что люблю woocommerce, даже с уровнем владения PHP = 0, магазин кастомизируется как ангел ;)
 
Сверху Снизу