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

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

Тема в разделе "Вопросы, советы и доработки.", создана пользователем m-bazhenov, 7 окт 2015.

  1. m-bazhenov

    m-bazhenov

    Сообщения:
    5
    Симпатии:
    4
    Баллы:
    3
    Привет! Возможно, тут кому-нибудь пригодится мой небольшой опыт в 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. Показ количества товаров.
    Хотя формально вроде бы должны, потому как код, отвечающий за их выход, остается не тронутым.
     
    Последнее редактирование: 7 окт 2015
    • Нравится Нравится x 4
  2. m-bazhenov

    m-bazhenov

    Сообщения:
    5
    Симпатии:
    4
    Баллы:
    3
    Небольшое дополнение: решение проблемы с некорректным отображением названия страниц.

    В файл 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, магазин кастомизируется как ангел ;)