Получить конкретные значения атрибутов продукта для определенной категории продуктов в Woocommerce - PullRequest
0 голосов
/ 29 апреля 2018

Мне уже удалось получить все атрибуты цвета с этим кодом:

$color_terms = get_terms(
        array(
        'taxonmy'=>'pa_color'
    ));

Это нормально работает для страницы магазина и возвращает все цвета, но как я могу ограничить ее определенной категорией? Допустим, в категории «Рубашки» у меня есть только 2 цвета, и я хочу показать только эти 2 цвета.

1 Ответ

0 голосов
/ 29 апреля 2018

попробуйте следующую пользовательскую функцию, которая использует уникальный легкий запрос SQL:

function get_attribute_terms_in_product_cat( $category_term_name, $attribute_taxonomy ){
    global $wpdb;

    $terms = $wpdb->get_results( "SELECT DISTINCT t.*
        FROM {$wpdb->prefix}terms as t
        JOIN {$wpdb->prefix}term_taxonomy as tt ON tt.term_id = t.term_id
        JOIN {$wpdb->prefix}term_relationships as tr ON tt.term_taxonomy_id = tr.term_taxonomy_id
        WHERE tt.taxonomy LIKE '$attribute_taxonomy'
        AND tr.object_id IN ( SELECT DISTINCT tr2.object_id
            FROM {$wpdb->prefix}term_relationships as tr2
            JOIN {$wpdb->prefix}term_taxonomy as tt2 ON tt2.term_taxonomy_id = tr2.term_taxonomy_id
            JOIN {$wpdb->prefix}terms as t2 ON tt2.term_id = t2.term_id
            WHERE tt2.taxonomy LIKE 'product_cat' AND t2.name = '$category_term_name'
        )" );

    return $terms;
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). Проверено и работает.


ИСПОЛЬЗОВАНИЕ :

// Get the "pa_color" attribute terms for product category "Shirts"
$terms = get_attribute_terms_in_product_cat( "Shirts", "pa_color" );

Здесь "Рубашки" - название термина категории продуктов, а "pa_color" Таксономия атрибута продукта…

Вы получите массив значений атрибутов продукта (термин объекта), содержащий:

  • термин ID (ключ term_id)
  • название термина (ключ name)
  • термин слизняк (ключ slug)

Вы можете использовать цикл foreach для доступа к каждому термину объекта:

// Get the "pa_color" attribute terms for product category "Shirts"
$terms = get_attribute_terms_in_product_cat( "Shirts", "pa_color" );

// Loop through each term
foreach( $terms as $term ){
    $term_id   = $term->term_id;
    $term_name = $term->name;
    $term_slug = $term->slug;
}
...