Я попробовал несколько приведенных выше примеров, и они не совсем работали так, как я хотел. Так что я немного покопался и провел небольшое исследование, вот как у меня это получилось.
В моем конкретном случае мне нужно было собрать все идентификаторы категории для определенного поста, а затем вернуть эту переменную в массив аргументов WP_Query.
Во-первых, вам нужно взять условия поста
$terms = get_the_terms( $post->ID, 'category' );
Далее вам нужно инициализировать переменную, которую вы хотите использовать позже:
$cat_terms = array();
Далее вы объявляете foreach для получения каждого отдельного идентификатора термина
foreach ( $terms as $term ) {
$cat_terms[] = $term->term_id;
}
Теперь предположим, что вы хотите использовать возвращаемый список через запятую для этой переменной $ cat_terms. Мы собираемся использовать функцию «соединения»
$comma_separated_terms = join( ", ", $cat_terms );
Теперь предположим, что вы хотите использовать эту переменную, чтобы включить в свой цикл WP_Query, скажем, параметр 'category__in'. Мы собираемся использовать 'array_values'.
$values = array_values($cat_terms);
Приятно то, что теперь мы можем вставить эту переменную $ values в аргументы WP_Query:
<?php global $post;
$query = new WP_Query(array(
'post_type' => 'post_type_name',
'category__in' => $values));
?>
В моем конкретном случае клиент хотел, чтобы некоторые пользовательские типы сообщений отображались на боковой панели в зависимости от категорий сообщений в блоге. Поэтому мне нужно было собрать все условия в блоге и сопоставить их с условиями для категорий пользовательских типов сообщений.
Итоговый код Выглядел примерно так:
<?php
$terms = get_the_terms( $post->ID, 'category' );
$cat_terms = array();
foreach ( $terms as $term ) {
$cat_terms[] = $term->term_id;
}
$values = array_values($cat_terms);
?>
<h3><?php echo $title; ?></h3>
<?php global $post;
$query = new WP_Query(array(
'post_type' => 'custom_post_type',
'category__in' => $values));
if ( $query->have_posts() ) : ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
// Code for loop goes here
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>