menex.ru
← Все статьи

Добавление атрибутов Woocommerce в карточку товара созданную в Oxygen

11.10.2022 • Теги: #hook #Oxygen #woocommerce #wordpress #Хук

Столкнулся с такой проблемой, что созданные атрибуты в Woocommerce не выводятся в карточке товаров которая сверстана в Oxygen. Вернее если применен стандартный вывод информации товара. Так же атрибуты не выводятся в модальном окне через плагин yith-woocommerce-quick-view.

Решение нашел такое:

С помощью хуков вывел атрибуты и в большой карточке товаров и в модальном окне. Так же можно выводить в мини-карточках на странице архивов.

// Функция вывода атрибутов
function atrb_productShoes() {
global $product;
$product->list_attributes();
}
// Хук для вывода в большой карточке товара
add_action( 'woocommerce_single_product_summary', 'atrb_productShoes' );
// Хук для вывода в карточке товара в YITH окне
add_action( 'yith_wcqv_product_summary', 'atrb_productShoes', 16 );

Чтобы посмотреть порядок вывода для модального окна YITH, можно заглянуть в файл:

/wp-content/plugins/yith-woocommerce-quick-view/includes/class.yith-wcqv-frontend.php

Сам код я взял на сайте https://wpcraft.top/woocommerce-kak-vyvesti-atributy-tovarov-v-kataloge/ Там есть еще пару вариантов, я их не проверял. Но размещу тут, вдруг пригодятся.

function atrb_productShoes2() {
    global $product;
    global $post;

    $attributes = $product->get_attributes();

    if ( ! $attributes ) {
        return;
        }

    foreach ( $attributes as $attribute ) {

    // Получение таксаномии
    $terms = wp_get_post_terms( $product->id, $attribute[ 'name' ], 'all' );
    $taxonomy = $terms[ 0 ]->taxonomy;

    // Получение объекта таксаномии
    $taxonomy_object = get_taxonomy( $taxonomy );

    // Получение меток атрибутов
    $attribute_label = $taxonomy_object->labels->name;
    $attribute_label = str_replace('Товар', '', $attribute_label);

    // Отображение метки с кликабельным списком терминов
    echo get_the_term_list( $post->ID, $attribute[ 'name' ] , '<div class="attributes">' . $attribute_label . ': ' , ', ', '</div>' );
    }
}
// Хук для вывода после заголовка товаров в категории
add_action( 'woocommerce_after_shop_loop_item_title', 'atrb_productShoes2' );

И вывод не всех атрибутов, а только первых двух:

function atrb_productShoes2() {
    global $product;
    global $post;

    $attributes = $product->get_attributes();

    if ( ! $attributes ) {
        return;
        }

    $counter = 0; // задаем счетчик
    foreach ( $attributes as $attribute ) {
        $counter++; // Считаем количество итераций и выходим из цикла при условии
        if($counter > 2) {
            break;
            };

    // Получение таксаномии
    $terms = wp_get_post_terms( $product->id, $attribute[ 'name' ], 'all' );
    $taxonomy = $terms[ 0 ]->taxonomy;

    // Получение объекта таксаномии
    $taxonomy_object = get_taxonomy( $taxonomy );

    // Получение меток атрибутов
    $attribute_label = $taxonomy_object->labels->name;
    $attribute_label = str_replace('Товар', '', $attribute_label);

    // Отображение метки с кликабельным списком терминов
    echo get_the_term_list( $post->ID, $attribute[ 'name' ] , '<div class="attributes">' . $attribute_label . ': ' , ', ', '</div>' );
    }
}
// Хук для вывода после заголовка товаров в категории
add_action( 'woocommerce_after_shop_loop_item_title', 'atrb_productShoes2' );