Получить список терминов, в которых есть записи в другом термине


У меня есть атрибут продукта под названием "цвет", и когда я нахожусь на странице архива (например, цвет = синий) Я хочу отобразить список всех родительских категорий товаров, содержащих товары с этим атрибутом, цвет= синий.

Я попытался использовать get_queried_object_id(), чтобы получить термин архива (синий) в сочетании с get_terms(), однако я не смог этого понять. Я хотел бы повторить, что я хочу получить список терминов, а не сообщений.

Если кто-нибудь может веди меня в правильном направлении, я был бы тебе признателен!

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

Я пытался сделать что-то подобное, чтобы получить список всех сообщений, относящихся к обеим таксономиям (pa_color и категория продукта), но я не уверен, как получить список только категорий.

$current_color = get_queried_object_id();

$query = new WP_Query( array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'orderby'        => 'title',
    'order'          => 'ASC',
    'tax_query'      => array(
                               array(
                                        'taxonomy' => 'pa_color',
                                        'field'    => 'term_id',
                                        'terms'    => $current_color,
                                        'operator' => 'AND'
                                    ),
                                    array(
                                        'taxonomy' => 'product_cat',
                                        'field'    => 'term_id',
                                        'terms'    => $cats
                                    )
                                )
                        ) );
Author: Edegist, 2021-05-24

1 answers

Попробуйте заменить 'operator' => 'AND' на 'relation'=>'AND'

Обновленный фрагмент кода:

$current_color = get_queried_object_id();

$query = new WP_Query( array(
    'post_type'      => 'product',
    'post_status'    => 'publish',
    'posts_per_page' => -1,
    'orderby'        => 'title',
    'order'          => 'ASC',
    'tax_query'      => array(
                              'relation' => 'AND'
                               array(
                                        'taxonomy' => 'pa_color',
                                        'field'    => 'term_id',
                                        'terms'    => $current_color,
                                    ),
                                    array(
                                        'taxonomy' => 'product_cat',
                                        'field'    => 'term_id',
                                        'terms'    => $cats
                                    )
                                )
                        ) );

Ссылка: https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters ( Обработка Нескольких Таксономий )

Изменить 1: Вы можете отредактировать приведенный выше запрос, чтобы возвращать только ids ('поля'=> 'идентификаторы') и использовать get_terms для этих идентификаторов, чтобы получить список категорий

get_terms( array( 
   'taxonomy' => 'product_cat',
   'object_ids' => $posts_matching_criteria
); 

Ссылка 1: https://developer.wordpress.org/reference/functions/get_terms/

Ссылка 2 : https://developer.wordpress.org/reference/classes/wp_term_query/__construct/#user-contributed-notes

  1
Author: ViralP, 2021-05-26 09:35:12