В одном из постов я анализировал плагины для создания массовых скидок (акций). В процессе этого мною был выработан довольно универсальный алгоритм создания акций.
Переделка плагина Woo Product Category Discount
Woo Product Category Discount — плагин массово редактирующий акционную цену у категорий товаров. Я изменил этот плагин, теперь он применяет скидки относительно меток товаров (product_tag).
В бесплатной версии плагин Woo Product Category Discount дает возможность применить скидку в рублях. Для снижения в процентах необходимо купить полную версию
Я заменил все Category, category, cat на Tag, tag соответственно. Изменения делал в файлах cd-admin.php и в скрипте tag-discount.js (название скрипта также изменено). Скачать измененный плагин.
Оформление акции
Теперь оформляем акцию соответствующим образом, добавляя название, описание, изображение метки. Изображение метки заводим с помощью плагина taxonomy term image master.
Выводим изображение с акцией (и ссылкой на акцию) в карточке товара:
// Выводим параметры метки товара function tag_actions_woocommerce() { global $post; echo '<div id="actions">'; $actions_id = wp_get_object_terms($post->ID, 'product_tag'); foreach ($actions_id as $action_id) : if ( $action_id->term_image ): echo '<a href="' .get_tag_link($action_id->term_id). '">'; echo wp_get_attachment_image( $action_id->term_image, 'full' ); echo '</a>'; endif; endforeach; echo '</div>'; } add_action( 'woocommerce_single_product_summary', 'tag_actions_woocommerce', 15 );
Выводим изображение акции в архивах товаров
function woocommerce_tag_actions_in_archive() { global $post; echo '<div id="actions">'; $actions_id = wp_get_object_terms($post->ID, 'product_tag'); foreach ($actions_id as $action_id) : if ( $action_id->term_image ): echo wp_get_attachment_image( $action_id->term_image, 'full' ); endif; endforeach; echo '</div>'; } add_action( 'woocommerce_shop_loop_item_title', 'woocommerce_tag_actions_in_archive', 8 );
CSS для акционного изображения в архиве
/* Оформление акций */ .products .product #actions {position: absolute; top: 50px; right: 5px;} .products .product #actions img {max-width: 50px;}
В зависимости от верстки сайта — можно задать 2 изображения акции: маленького размера для архивов и большое для карточки и для вывода на странице акции. Для этого можем задействовать дополнительное изображение таксономии.
Альтернативный способ ввода
Можно вводить метку альтернативным способом с помощью данного решения. Но в этом случае придется прописывать скрипт и стиль каждой метки по отдельности.
Добавления к скрипту и стили:
$('.products .product_tag-diskont a > .label, .product_tag-diskont #product-gallery > .label').prepend('ДИСКОНТ');
.products .product .label span.ondis,
#product-content .label span.ondis {background-color: #FF5722; width: 80px;}
.products .product .label span.ondis:before,
#product-content .label span.ondis:before {border-top-color: #e23802;}
Страница акции
Страница акции выглядит как стандартный шаблон термина таксономии. Выводим вверху изображение и описание акции. Ниже динамически будут выводиться товары участвующие в акции (у которых присвоена данная метка).
Также нужно оформить страницу со всеми акциями. Для этого нужно создать шаблон с выводом терминов таксономии product_tag (меток товара).
Проверка есть ли акции (скидки)
С помощью функции:
function woo_have_onsale_products() { global $woocommerce; // Get products on sale $product_ids_on_sale = array_filter( wc_get_product_ids_on_sale() ); if( !empty( $product_ids_on_sale ) ) { return true; } else { return false; } } // Example: if( woo_have_onsale_products() ) { echo 'have onsale products'; } else { echo 'no onsale product'; }
Без функции, напрямую:
<?php global $woocommerce; $product_ids_on_sale = array_filter( wc_get_product_ids_on_sale() ); if( !empty( $product_ids_on_sale ) ) { echo '<h2>Акции</h2>'; } ?>
Вывод текста для товара с меткой
Еще один альтернативный простой способ вывода текста для товара с меткой, в шаблоне товара
add_filter( 'woocommerce_stock_html', 'filter_woocommerce_stock_html', 10, 3 ); function filter_woocommerce_stock_html( $availability_html, $availability_availability, $variation ) { global $product; if ( has_term( 'preorder', 'product_tag', $product->ID ) ) : // Define here your text to replace $availability_html = __( 'Say something here', 'woocommerce' ); endif; return $availability_html; };
preorder — наименование необходимой метки
Тэги: woocommerce
А есть этот плагин такой же как оригинальный, только с выставлением процента для категории?
Заранее спасибо!