Записи, связанные с WP Query, по текущему идентификатору тега страницы

Я пытаюсь вывести связанные сообщения текущего сообщения tag_ID . В текущем коде сообщения будут выводить все сообщения из тега property вместо определенного тега.

Как я могу только возвращать сообщения на основе текущих сообщений tag_ID ?

 <?php $post_tag = get_the_tags($post->ID)?>//Not sure if correct <?php $args = array( 'post_type' => 'property', 'tag' => $post_tag, ); $related_posts = new WP_Query( $args ); ?> <?php while ( $related_posts -> have_posts() ) : $related_posts -> the_post(); ?> <h2><?php echo get_the_title()?></h2> //etc <?php endwhile; wp_reset_query(); ?> 

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

 $tags = wp_get_post_terms( get_queried_object_id(), 'city', ['fields' => 'ids'] ); // Now pass the IDs to tag__in $args = array( 'post_type' => 'property', 'post__not_in' => array( $post->ID ), 'tax_query' => array( array( 'taxonomy' => 'city', 'terms' => $tags, ), ), ); $related_posts = new WP_Query( $args ); 

Solutions Collecting From Web of "Записи, связанные с WP Query, по текущему идентификатору тега страницы"

get_the_tags() возвращает массив имен тегов, идентификатора и т. д. Вы должны хранить только идентификаторы в массиве и использовать их в своем запросе.

 $post_tag = get_the_tags ( $post->ID ); // Define an empty array $ids = array(); // Check if the post has any tags if ( $post_tag ) { foreach ( $post_tag as $tag ) { $ids[] = $tag->term_id; } } // Now pass the IDs to tag__in $args = array( 'post_type' => 'property', 'tag__in' => $ids, ); // Now proceed with the rest of your query $related_posts = new WP_Query( $args ); 

Также используйте wp_reset_postdata(); вместо wp_reset_query(); когда вы используете WP_Query(); ,

ОБНОВИТЬ

Как указано в @birgire, WordPress предлагает wp_list_plunk() для извлечения определенного поля каждого объекта в строке, которая имеет те же функции, что и функция array_column() .

Итак, мы можем изменить это:

 // Define an empty array $ids = array(); // Check if the post has any tags if ( $post_tag ) { foreach ( $post_tag as $tag ) { $ids[] = $tag->term_id; } } 

К этому:

 // Check if the post has any tags if ( $post_tag ) { $ids = wp_list_pluck( $post_tag, 'term_id' ); }