Содержание
Задача. Необходимо на странице каталога Woocommerce вывести под названием товаров первые несколько их атрибутов.
Вывод всех или нескольких атрибутов
Решение 1. Можно использовать Код №1 в functions.php
, но он выводит атрибуты таблицей. Такой вариант больше подходит для вывода на странице товара.
1 2 3 4 5 6 7 8 9 |
// Функция вывода атрибутов function qfurs_productShoes_1() { global $product; $product->list_attributes(); } // Хук для вывода после заголовка товаров в категории add_action( 'woocommerce_after_shop_loop_item_title', 'qfurs_productShoes_1' ); |
Решение 2. Код №2 в functions.php
выведет названия атрибутов с значениями просто обернув в div
с class="attributes"
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
function qfurs_productShoes_2() { 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', 'qfurs_productShoes_2' ); |
Решение 3. Код №3 в functions.php
аналогичен Коду №2, но здесь мы выводим не все атрибуты, а только первые два:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function qfurs_productShoes_3() { 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', 'qfurs_productShoes_3' ); |
Вывод конкретного атрибута товара
Решение 4. Код №4 выводит просто значения конкретного атрибута:
1 2 3 4 5 6 7 8 9 10 11 12 |
function qfurs_add_attribute_brend (){ global $product; // 'pa_' + слаг нужного атрибута $values = get_the_terms( $product->id, 'pa_brend'); foreach ( $values as $value ) { echo $value->name; } } qfurs_add_attribute_brend(); // Выведет - Adidas |
Решение 5. Код №5 выводит строку значений конкретного атрибута через запятую:
1 2 3 4 5 6 7 8 9 10 |
function qfurs_add_attribute_string_brend (){ global $product; // 'brend' - слаг нужного атрибута echo "Бренд: " . $product->get_attribute( 'brend' ); } // Выведет - Adidas add_action( 'woocommerce_after_shop_loop_item_title', 'qfurs_add_attribute_string_brend ' ); |
Благодарю за помощь!
Помогло)
А как убрать кликабельные термины атрибутов? Простое удаление строчки кода ничего не дает.
Попробуйте обернуть функцию
в PHP-функцию strip_tags(). Будет так
Отпишитесь получилось или нет.
Эта функция работает, ссылки исчезли… Но с этой функцией и исчезает возможность хоть как-то стилизовать элементы…
Еще как вариант, почитал про функцию wp_get_post_terms(), если заменим параметр ‘all’ на ‘names’, то должны получить массив просто названий атрибутов:
Возможно так еще сможете приспособить под себя.
Не сработало…
А можно ли как то вывести отдельно взятые атрибуты, без кликабельности?
Заранее спасибо!
Добавил кодом №4. Получаем конкретный атрибут
get_the_terms( $product->id, 'pa_brend');
и перебираем значения.Добрый день! Прописал атрибут
$values = get_the_terms( $product->id, ‘invert’);
Не сработало. В чем может быть проблема ?
Приветствую. К атрибутам нужна приставка
'pa_'
. Т.е. не'invert'
, а'pa_invert'
.