У меня есть следующий код:
<div class="documents-posts">
<?php if (!empty($posts)) : ?>
<?php foreach ($posts as $post) : ?>
<?php set_query_var( 'taxonomy', $taxonomy ); ?>
<?php get_template_part('document'); ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
, который прекрасно работает, если у каждого сообщения есть только одна категория. Когда я назначаю вторую категорию посту, пост отображается дважды. Если я сделаю так, чтобы в нем было 3 категории, пост будет отображаться трижды ... Почему?
Обновление: Объявление переменной $ posts
$post_type = 'press-release';
$taxonomy = 'press-release-types';
$categories = $xxxxxx->get_categories($taxonomy);
$posts = $xxxxxx->get_posts_ordered_by_categories($post_type, $taxonomy, $categories);
set_query_var( 'posts', $posts );
set_query_var( 'categories', $categories );
set_query_var( 'taxonomy', $taxonomy );
Обновление 2: От Помощника php
public function get_posts_ordered_by_categories($post_type, $taxonomy, $categories) {
$posts = [];
foreach ($categories as $category) {
$category_posts = $this->get_posts_from_category($post_type, $taxonomy, $category->term_id);
$posts = array_merge($posts, $category_posts);
}
return $posts;
}
protected function get_posts_from_category($post_type, $taxonomy, $category_id) {
return get_posts([
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => (int) $category_id,
)
),
'posts_per_page' => -1,
'orderby' => 'date',
'order' => 'DESC',
'post_status' => 'publish',
'post_type' => $post_type,
'suppress_filters' => false,
]);
}