WooCommerce как вывести акционный товар со скидкой в карточке товара
Изначально в WooCommerce на странице товара есть похожие товары, но многие клиенты ко мне обращаются с просьбой вывести акционные товары. Так как тема достаточно популярная я решил про нее написать небольшое руководство для тех кто уже разрабатывает интернет магазины на WooCommerce.
Вот так выводятся похожие товары на магазине который подправлял Я «Постельный комплект«. И сегодня я для него сделаю вывод акционных товаров в отдельном блоке, но такого же вида.
В вашей теме для магазина скорее всего находится папка WooCommerce в которой лежит файл content-single-product.php и в нем есть подключение похожих товаров. У меня это происходит благодаря строке кода:
1 |
<?php if(etheme_get_option('show_related')) woocommerce_output_related_products(); ?> |
Акционные товары мы будем выводить ниже похожих, для этого мы подключим новый файл при помощи кода.
1 |
<?php require_once( trailingslashit( get_template_directory() ). 'woocommerce/single-product/product-in-sale.php' ); ?> |
Положим созданный файл в папку вашего шаблона -> woocommerce -> single-product -> product-in-sale.php. Чтобы файл выглядел красиво я за его основу взял файл из моей темы находящийся по адресу Папка шаблона -> woocommerce -> single-product -> related.php. У вас скорее всего такой файл тоже есть, если нету, то может быть 2 причины:
- У вас дочерняя тема и вам нужно взять этот файл из родительской темы. Подробнее об устройстве дочерних тем вы можете почитать в моей статье «Дочерние темы в WordPress«.
- Ваша тема использует этот файл из плагина WooCommerce и вы можете найти этот файл в самом плагине.
Искать файл нужно именно в том порядке как я указал выше.
Если файл найден, то скопируйте данные из файла related.php в созданный нами файл product-in-sale.php. Дальше мы будем менять этот код.
Открываем файл, созданный нами product-in-sale.php и поправляем код по логике, которую я использовал у себя. Ниже я приведу листинг когда моего файла и распишу какая часть кода отвечает за правильную выборку кода. (Внимание все кроме функции выборки может отличаться).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php /** * Related Products * * @author WooThemes * @package WooCommerce/Templates * @version 3.0.0 */ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly global $product, $woocommerce_loop; $posts_per_page = 5; // updated for woocommerce v3.0 $related = array_map( 'absint', array_values( wc_get_related_products( $product->get_id(), $posts_per_page ) ) ); if ( sizeof( $related ) == 0 ) return; echo '<h2 class="products-title"><span>Акция на товар</span></h2>'; $args = apply_filters( 'woocommerce_related_products_args', array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $posts_per_page, 'orderby' => array('meta_value' => 'ASC', 'date' => 'DESC'), //'post__in' => $related, 'post__not_in' => array( $product->id ), 'meta_query' => array( array( 'key' => '_stock_status', 'value' => 'instock', 'compare' => '=', 'key' => '_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'numeric' ) ) ) ); $slider_args = array( //'title' => esc_html__( 'Related Products', 'xstore' ) ); etheme_create_slider( $args, $slider_args ); wp_reset_postdata(); |
Все что вам будет необходимо изменить в вашем коде для вывода акционных товаров это верхняя часть кода, где нужно указать:
- Правильное количество товаров $posts_per_pag.
- Заголовок блока.
- указать сортировку.
- Добавить параметры в массив для фильтрации по кастомным полям _stock_statu и _sale_price.
Сильно подробно рассказывать не буду, оставляю вам возможность разобраться самостоятельно. Если не разберетесь, то жду вопросов в комментариях.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly global $product, $woocommerce_loop; $posts_per_page = 5; // updated for woocommerce v3.0 $related = array_map( 'absint', array_values( wc_get_related_products( $product->get_id(), $posts_per_page ) ) ); if ( sizeof( $related ) == 0 ) return; echo '<h2 class="products-title"><span>Акция на товар</span></h2>'; $args = apply_filters( 'woocommerce_related_products_args', array( 'post_type' => 'product', 'ignore_sticky_posts' => 1, 'no_found_rows' => 1, 'posts_per_page' => $posts_per_page, 'orderby' => array('meta_value' => 'ASC', 'date' => 'DESC'), //'post__in' => $related, 'post__not_in' => array( $product->id ), 'meta_query' => array( array( 'key' => '_stock_status', 'value' => 'instock', 'compare' => '=', 'key' => '_sale_price', 'value' => 0, 'compare' => '>', 'type' => 'numeric' ) ) ) ); |
Данный код для вывода акционных товаров был протестирован с версией WooCommerc 3.0, в меньшей версии может немного изменяться.
Вот как акционный товар выводится на моем интернет магазине
В следующих уроках я расскажу как вывести новинки в товаре, следите за моими статьями и дождетесь как только у меня появится свободное время.

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.