WooCommerce весьма хороший инструмент для создания интернет-магазина на базе WordPress, однако работа с ним иногда вызывает вопросы. Порой найти решение простой задачи, например, вывести банальный артикул в карточке товара у некоторых вызывают вопросы. Я собрал минимальный набор самых простых заметок, с которыми и делюсь с вами, в процессе статья будет разрастаться. Новые заметки будут обозначены меткой UPD (update).
Заметка #1
Вывести описание текущей категории WooCommerce.
<?php do_action('woocommerce_archive_description'); ?>
Заметка #2
Вывести миниатюру текущей категории WooCommerce.
<?php global $product;
if (is_product_category()) {
global $wp_query;
$cat = $wp_query->get_queried_object();
$thumbnail_id = get_woocommerce_term_meta($cat->term_id, 'thumbnail_id', true);
$image = wp_get_attachment_url($thumbnail_id);
if ($image) {
echo '<img src="'. esc_url($image).'" alt="" />';
}
}?>
Заметка #3
Вывести список подкатегорий текущей категории WooCommerce, в которой мы находимся. Код выводит только те категории, в которых есть хотя бы 1 товар, категории без товаров не выводятся.
<?php global $product;
if (is_product_category()) {
global $wp_query;
$cat = $wp_query->get_queried_object();
$thumbnail_id = get_woocommerce_term_meta($cat->term_id, 'thumbnail_id', true);
$image = wp_get_attachment_url($thumbnail_id);
if ($image) {
echo '<img src="'. esc_url($image).'" alt="" />';
}
}?>
Заметка #4
Вывести заголовок страницы WooCommerce, скрыть его, если заголовка у страницы нет.
<?php if ( apply_filters( 'woocommerce_show_page_title', true ) ) : ?>
<h1 class="title_style"></h1>
<?php endif; ?>
Заметка #5
Вывести значение атрибута товара WooCommerce, зная его slug name.
<?php global $product; echo $product->get_attribute('slugname'); ?>
// slugname - slug вашего атрибута
<?php if($product->get_attribute('slugname') == true) {echo "<span>Название атрибута: ".$product->get_attribute('slugname')."</span>";} ?>
// slugname - slug вашего атрибута. Но в данном случае вы можете ещё подписать атрибут и скрыть текст подписи, если атрибут не заполнен.
Заметка #6
Вывести все атрибуты товара WooCommerce.
<?php global $product; echo $product->list_attributes();?>
Заметка #7
Вывести краткое описание товара. Краткое описание товара указывается в админке, при редактировании товара.
<?php echo apply_filters( 'woocommerce_short_description', $post->post_excerpt ) ?>
Заметка #8
Вывести кнопку «Добавить в корзину», которая будет добавлять одну единицу текущего товара в корзину.
<?php
echo apply_filters( 'woocommerce_loop_add_to_cart_link', // WPCS: XSS ok.
sprintf( '<a target="_blank" target="_blank" href="%s" data-quantity="%s" class="btn">Добавить в корзину &rarr;</a>', esc_url( $product->add_to_cart_url() ), esc_attr( isset( $args['quantity'] ) ? $args['quantity'] : 1 ), esc_attr( isset( $args['class'] ) ? $args['class'] : 'button' ), isset( $args['attributes'] ) ? wc_implode_html_attributes( $args['attributes'] ) : '', esc_html( $product->add_to_cart_text() ) ), $product, $args );
?>
Заметка #9
Вывести артикул товара WooCommerce.
<?php echo ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' ); ?>
// выводим просто артикул
<?php if ( wc_product_sku_enabled() && ( $product->get_sku() || $product->is_type( 'variable' ) ) ) : ?>
<p><?php esc_html_e( 'ID товара:', 'woocommerce' ); ?> <strong><?php echo ( $sku = $product->get_sku() ) ? $sku : esc_html__( 'N/A', 'woocommerce' ); ?></strong><p>
<?php endif; ?>
// выводим артикул + свою надпись перед артикулом, т.е. условная логистика
Заметка #10
Вывести стоимость текущего товара WooCommerce.
<?= $product->get_price(); ?> // обычный формат
<?= $product->get_price_html(); ?> // HTML формат вывода
<?php if ( $product->price > 0 ) {?> // Условная логика: Если НЕТ цены - ничего не выводим, если цена ЕСТЬ - показываем её
<?= $product->get_price(); ?> // обычный формат
<?php } else { ?><?php } ?>
Заметка #11
В карточке товара вывести похожие товары WooCommerce из этой же категории.
<?php echo do_shortcode( '[related_products per_page="3"]' ); ?>
Пояснение: Вывод происходит шорткодом, вы можете указать количество выводимых товаров. Переопределить шаблон вывода товаров нужно в шаблоне /woocommerce/content-related.php
Заметка #12
В результатах поиска отображаем только товары из магазина.
Добавляем в functions.php темы:
// в результатах поиска отображаем только товары из магазина
function dco_pre_get_posts($query) {
if (!is_admin() && $query->is_main_query()) {
if ($query->is_search) {
$query->set('post_type', 'product');
}
}
}
add_action('pre_get_posts', 'dco_pre_get_posts');
Заметка #13
Выводим иконку корзины и счетчик товаров в ней, работает на AJAX
В файл functions.php добавляем:
add_filter('woocommerce_add_to_cart_fragments', 'header_add_to_cart_fragment');
function header_add_to_cart_fragment( $fragments ) {
global $woocommerce;
ob_start();
?>
<span class="basket-btn__counter">(<?php echo sprintf($woocommerce->cart->cart_contents_count); ?>)</span>
<?php
$fragments['.basket-btn__counter'] = ob_get_clean();
return $fragments;
}
На место, где нужно вывести корзину и счётчик товаров в корзине добавляем:
<div class="cart_area">
<?php
global $woocommerce; ?>
<a target="_blank" target="_blank" href="<?php echo $woocommerce->cart->get_cart_url() ?>" class="basket-btn basket-btn_fixed-xs">
<i class="fas fa-shopping-cart"></i><span>Корзина <span class="basket-btn__counter">(<?php echo sprintf($woocommerce->cart->cart_contents_count); ?>)</span></span>
</a>
</div>
Заметка #14
Выводим знак текущей выбранной валюты магазина.
<?= get_woocommerce_currency_symbol( $currency = '' ); ?>
Заметка #15
Выводим статус остатка «Есть в наличии», «Нет в наличии»
<?php if (get_post_meta(get_the_ID(), '_stock_status', true) == 'outofstock') { // наличие товара ?>
<div class="availability outofstock">Нет в наличии</div>
<?php } else { ?>
<div class="availability">Есть в наличии</div>
<?php } ?>
Данная статья в процессе будет разрастаться, если у Вас есть, чем поделиться — пишите в комментариях, буду добавлять заметки по WooCommerce сюда.
Если Вам требуется разработка уникального интернет-магазина на WooCommerce, обращайтесь ко мне. Буду рад создать для Вас уникальный, продающий и функциональный интернет-магазин.