Вывод цены товара в произвольном месте по ID

Вывод цены товара по ID

Сначала приведу код, а потом объясню, как я его использовал и для чего.

Вставляем в functions.php вашей темы:

/*Шорткод для вывода цены продукта по id в произвольном месте*/

function custom_price_shortcode_callback( $atts ) {

    $atts = shortcode_atts( array(
        'id' => null,
    ), $atts, 'product_price' );

    $html = '';

    if( intval( $atts['id'] ) > 0 && function_exists( 'wc_get_product' ) ){
        
        $product = wc_get_product( intval( $atts['id'] ) );

        // Получаем цены товара
        $price         = wc_get_price_to_display( $product, array( 'price' => $product->get_price() ) );
        $regular_price = wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ); // Получаем регулярную цену
        $sale_price    = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) ); // Получаем цену распродажи

        // Formatting price settings (for the wc_price() function)
        $args = array(
            'ex_tax_label'       => false,
            'currency'           => 'RUB', //Указываем валюту магазина
            'decimal_separator'  => '.',   //Разделитель десятичных
            'thousand_separator' => ' ',   //Разделитель тысяч
            'decimals'           => 0,     //Количество знаков после запятой
            'price_format'       => '%2$s %1$s',
        );

        // Вывод в HTML
        if( ! empty( $sale_price ) && $sale_price != 0 && $sale_price < $regular_price )
            $html = "<del>" . wc_price( $regular_price, $args ) . "</del> <ins>" . wc_price( $sale_price, $args ) . "</ins>"; // Sale price is set
        else
            $html = "<ins>" . wc_price( $price, $args ) . "</ins>"; // No sale price set
    }
    return $html;
 }
 add_shortcode( 'product_price', 'custom_price_shortcode_callback' );

Шорткод для вывода цены:

[product_price id="1234"]

где 1234 — id товара.

Чтобы вывести цену вариации, укажите в шорткоде id вариации товара.

Решение было взято со StackOverflow. В исходном коде также были использованы дополнительные стили для оформления выводимых цен. Поскольку у меня в теме все необходимые стили уже есть, я убрал эту часть кода.

Где я применил вывод цен по ID

Работая над интернет-магазином фабрики мягкой мебели, встала задача добавить новый тип товаров — кровати. При этом, в цену кровати матрас, как это часто бывает, не входит. Поэтому на странице с описанием кровати было решено добавить блок с матрасами, чтобы пользователь мог сразу выбрать подходящий ему по характеристикам матрас и добавить его в корзину, не покидая страницу кровати.

Всего четыре матраса с вариациями по размеру. Кровати же — каждый размер отдельным товаром, чтобы можно было выводить для каждой только матрасы нужного размера.

В итоге сверстал вот такой блок с матрасами:

Блок с матрасами

Цены вывел шорткодами [product_price id="1234"], указывая в id идентификатор нужной вариации матраса. Теперь при изменении цен на матрасы или завершении распродажи, не придётся вручную менять стоимость на каждой странице с кроватями.

Добавление товара в корзину без перезагрузки страницы

В первую очередь в настройках Woocommerce во вкладке «Товары» проверяем, чтобы была включена галочка «Включить Ajax для кнопки добавления в корзину из архивов».

На странице с любой рубрикой нужно скопировать код кнопки «В корзину» из любой карточки товара.

Код кнопки «В корзину»

В моём случае он выглядит так:

<a href="?add-to-cart=123" data-quantity="1" class="primary is-small mb-0 button product_type_simple add_to_cart_button ajax_add_to_cart is-outline" data-product_id="123" data-product_sku="" aria-label="Добавить «Диван-кровать Loft» в корзину" rel="nofollow">В корзину</a>

После копирования нужно заменить идентификаторы на нужные вариации (выделил жирным) и поменять текст на кнопке.

Код может отличаться в зависимости от используемой вами темы. У меня в данном случае используется Flatsome.

Добавить комментарий

Ваш адрес email не будет опубликован.