WooCommerce как вывести акционный товар со скидкой в карточке товара
Изначально в WooCommerce на странице товара есть похожие товары, но многие клиенты ко мне обращаются с просьбой вывести акционные товары. Так как тема достаточно популярная я решил про нее написать небольшое руководство для тех кто уже разрабатывает интернет магазины на WooCommerce.
Вот так выводятся похожие товары на магазине который подправлял Я «Постельный комплект«. И сегодня я для него сделаю вывод акционных товаров в отдельном блоке, но такого же вида.
В вашей теме для магазина скорее всего находится папка WooCommerce в которой лежит файл content-single-product.php и в нем есть подключение похожих товаров. У меня это происходит благодаря строке кода:
<?php if(etheme_get_option('show_related')) woocommerce_output_related_products(); ?>Акционные товары мы будем выводить ниже похожих, для этого мы подключим новый файл при помощи кода.
<?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 и поправляем код по логике, которую я использовал у себя. Ниже я приведу листинг когда моего файла и распишу какая часть кода отвечает за правильную выборку кода. (Внимание все кроме функции выборки может отличаться).
<?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.
Сильно подробно рассказывать не буду, оставляю вам возможность разобраться самостоятельно. Если не разберетесь, то жду вопросов в комментариях.
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.




