Я пытаюсь добавить имена значений атрибутов атрибута продукта в качестве имени класса для каждого элемента.
Например, у меня есть атрибут «Настроение», а имена значений: «Счастливый», «Холодный», «Энергичный», «Сосредоточенный» и «Сонный». Мне просто нужно обернуть каждое имя значения атрибута в тег span и добавить отдельный класс следующим образом:
Mood: <span class = "attribute-chill">Chill</span> <span class = "attribute-sleepy">Sleepy</span>
У меня есть код, который отображает атрибуты, но мне просто нужно добавить классы CSS.
add_action( 'woocommerce_after_shop_loop_item_title', 'display_applications_attribute_pa_mood', 5 );
function display_applications_attribute_pa_mood() {
global $product;
$mood = $product->get_attribute('pa_mood');
if ( $mood ) {
printf('<span class = "attribute-mood">%1$s</span>', $mood );
}
}
Ниже для конкретных определенных атрибутов продукта будет отображаться каждое имя термина, встроенное в тег <span>
, с правильным желаемым значением свойства класса:
add_action( 'woocommerce_after_shop_loop_item_title', 'display_application_attributes', 5 );
function display_application_attributes() {
global $product;
// Define your desired product attribute taxonomies to be displayed
$attribute_taxonomies = array('pa_mood', 'pa_potency');
// Loop through defined taxonomies
foreach ( $attribute_taxonomies as $taxonomy ) {
// Get term names coma separated string
$term_names = $product->get_attribute($taxonomy);
if ( $term_names ) {
$output_terms = array(); // Initialize
// Loop through term names
foreach ( explode(', ', $term_names) as $term_name ) {
$output_terms[] = sprintf( '<span class = "attribute-%s">%s</span>',
sanitize_title($term_name), $term_name );
}
printf( '<div><strong>%s:</strong> %s</div>',
wc_attribute_label($taxonomy), implode(' ', $output_terms) );
}
}
}
Это должно работать так, как вы ожидаете.
Дополнение (на основе вашего комментария):
Показан только один термин (а если больше, то остальные учитываются):
add_action( 'woocommerce_after_shop_loop_item_title', 'display_application_attributes', 5 );
function display_application_attributes() {
global $product;
// Define your desired product attribute taxonomies to be displayed
$attribute_taxonomies = array('pa_mood', 'pa_potency');
// Loop through defined taxonomies
foreach ( $attribute_taxonomies as $taxonomy ) {
// Get term names coma separated string
$term_names = $product->get_attribute($taxonomy);
if ( $term_names ) {
$term_names = (array) explode(', ', $term_names);
$terms_count = count($term_names) - 1;
$term_name = current($term_names);
$count_string = $terms_count > 0 ? ' (+' . $terms_count . ')' : '';
printf( '<div><strong>%s:</strong> <span class = "attribute-%s">%s%s</span></div>',
wc_attribute_label($taxonomy), sanitize_title($term_name), $term_name, $count_string
);
}
}
}
Это должно работать так, как вы ожидаете.
@MiguelGomes Добавил дополнение для этого…
Еще раз спасибо... Что, если я хочу, чтобы эти атрибуты также отображались на страницах корзины/мини-корзины и оформления заказа под названием продукта?
@MiguelGomes Если вы хотите, чтобы эти атрибуты также отображались в корзине/мини-корзине и при оформлении заказа, вам следует сначала выполнить поиск, попытаться задать новый соответствующий подробный вопрос.
Я искал и не смог найти ничего подходящего. Вот почему я спросил здесь.
@MiguelGomes См. этот ответ или этот ответ адаптация вашего кода.
Я попробовал это решение, но, как я уже сказал, оно не сработало. Кроме того, этот код был написан 5 лет назад. Поверьте мне, я провожу исследование, прежде чем просить о помощи.
@MiguelGomes Код пятилетней давности все еще работает… Теперь это зависит от вашей темы, от того, используете ли вы блоки корзины/оформления заказа или нет, от типа продукта, добавленного в корзину, и многого другого… Так что ваш вопрос не может быть можно ответить в виде комментария к вопросу-комментарию.
@loictheaztec большое спасибо. Это было прекрасно. Если можно, еще кое-что... Можно ли как-нибудь показать только одно имя атрибута? (Даже если назначено несколько атрибутов). Пример: Настроение: Холод (+2) или просто Настроение: Холод.