Получение атрибутов текущего товара и сохранение их в переменной
Пытаюсь разобраться, как можно получить атрибуты текущего товара, сохранить их в переменной и добавить в класс.
Мне удалось получить атрибуты товара, но к сожалению, похоже, что отображаются атрибуты всех товаров для каждого товара, который я настроил. Вот код, над которым я работаю.
<div id="Container" class="nine columns mixitup-container bevtools-liquor">
<?php
// Запрос для получения товаров категории "liquors" которые есть в наличии
$liquor = new WP_Query( array(
'post_type' => 'product',
'product_cat' => 'liquors',
'meta_query' => array(
array(
'key' => '_stock_status',
'value' => 'instock'
)
)
) );
if ( $liquor->have_posts() ) : while ( $liquor->have_posts() ) : $liquor->the_post();
?>
// В этом цикле foreach я пытаюсь получить все термины для атрибутов liquor-brands
<?php
$brand_terms = get_the_terms( $post, 'pa_liquor-brands' );
foreach ( $brand_terms as $term ) :
?>
<?php $brand_string = ''; ?>
<?php $brand_string .= $term->slug . ' '; ?>
<?php endforeach; ?>
<div id="post-<?php the_ID(); ?>" class="three columns mix product-post <?php echo $brand_string ?>" >
</div>
<?php wp_reset_postdata(); ?>
<?php endwhile; else: ?>
<?php //сообщение об ошибке ?>
<?php endif; ?>
<?php wp_reset_query(); ?>
После запуска кода вот как выглядит вывод.
<div id="post-2190" class="34th-pursuit-joes-brew absolut aviation-gin bacardi botanist citadelle-gin don-papa gvine grey-goose jack-daniel johnnie-walker makers-mark monkey-shoulder pale-ale-katipunan" style="display: inline-block;" data-bound="">
</div>
<div id="post-2192" class="34th-pursuit-joes-brew absolut aviation-gin bacardi botanist citadelle-gin don-papa gvine grey-goose jack-daniel johnnie-walker makers-mark monkey-shoulder pale-ale-katipunan" style="display: inline-block;" data-bound="">
</div>
Как видите, оба товара показывают все атрибуты товаров вместо того, чтобы показывать только те, которые им назначены.

get_terms()
Получает термины из указанной таксономии или списка таксономий.
Вам нужно:
get_the_terms()
Получает термины таксономии, которые прикреплены к записи.
Таким образом, вы можете просто заменить
$brand_terms = get_terms( 'pa_liquor-brands' );
на
$brand_terms = get_the_terms( $post, 'pa_liquor-brands' );
И это должно сработать.
Вы можете узнать больше об этих двух функциях здесь:
https://developer.wordpress.org/reference/functions/get_terms/ https://developer.wordpress.org/reference/functions/get_the_terms/
Примечание:
Также вам нужно сбросить $brand_string
, иначе будут добавляться термины из других записей и выводиться
$brand_terms = get_the_terms($post, 'pa_liquor-brands');
$brand_string = ''; // Сбросить строку
foreach ($brand_terms as $term) :
$brand_string .= $term->slug . ' ';
endforeach;
// вывести $brand_string где-то ниже

Я попробовал ваше решение, но проблема осталась. По-прежнему отображаются все таксономии всех товаров

Попробуйте сбросить $brand_string прямо внутри вашего цикла. Если вы не сбросите его, то он будет накапливать данные из других записей.

Привет, Nath, я обновил свой код с твоим ответом. Не уверен, что сделал правильно, можешь проверить выше
