Получение атрибутов текущего товара и сохранение их в переменной

23 сент. 2016 г., 05:22:23
Просмотры: 33.3K
Голосов: 4

Пытаюсь разобраться, как можно получить атрибуты текущего товара, сохранить их в переменной и добавить в класс.

Мне удалось получить атрибуты товара, но к сожалению, похоже, что отображаются атрибуты всех товаров для каждого товара, который я настроил. Вот код, над которым я работаю.

    <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>

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

0
Все ответы на вопрос 1
6

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 где-то ниже
23 сент. 2016 г. 06:13:48
Комментарии

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

clestcruz clestcruz
27 сент. 2016 г. 18:07:09

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

ngearing ngearing
28 сент. 2016 г. 02:14:06

Извините, но как именно сбросить $brand_string внутри цикла?

clestcruz clestcruz
28 сент. 2016 г. 03:09:19

$brand_string = '';

ngearing ngearing
28 сент. 2016 г. 03:10:09

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

clestcruz clestcruz
28 сент. 2016 г. 03:48:39

Извини, не тот цикл. Я имел в виду твой цикл запроса. Я также обновил свой ответ.

ngearing ngearing
28 сент. 2016 г. 04:14:40
Показать остальные 1 комментариев