Запрос связанных записей в произвольном типе записей по произвольной таксономии
Я пытаюсь отобразить связанные записи по произвольной таксономии, но у меня есть только решение для связанных записей с использованием категории.
$orig_post = $post;
global $post;
$categories = get_the_category($post->ID);
if ($categories) {
$category_ids = array();
foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id;
$args=array(
'category__in' => $category_ids,
'post__not_in' => array($post->ID),
'posts_per_page'=> 4, // Количество связанных записей, которые будут показаны.
'caller_get_posts'=>1
);
$my_query = new wp_query($args);
if( $my_query->have_posts() ) {
echo '<div id="relatedposts" class="clearfix"><h4>Похожие записи</h4><ul>';
while ($my_query->have_posts()) {
$my_query->the_post();
?>
<?php
if ( has_post_thumbnail() ) { ?>
<li><div class="relatedthumb"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>">
<?php echo the_post_thumbnail(); ?></a>
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><div class="title"><?php the_title(); ?></div></a>
</div>
</li>
<?php }
?>
<?
}
echo '</ul></div>';
}
}
$post = $orig_post;
wp_reset_query();
Следующий код работает только для типов записей с зарегистрированной категорией, но не для произвольных типов таксономии.
Хорошо, теперь я нашел код, который позволяет использовать пользовательскую таксономию для отображения связанных записей для пользовательского типа записи.
$terms = get_the_terms( $post->ID , 'product_tags', 'string');
- это пользовательская таксономия, которую нужно использовать для запроса всех меток в вашем пользовательском типе записи'post_type' => 'products'
- это пользовательский тип записи, который вызывает все пользовательские метки, созданные в пользовательской таксономии, в данном случае это product_tags
Вставьте этот код в любое место внутри вашего цикла или запроса, чтобы отобразить все записи в вашем пользовательском типе записи. Это не фильтрует ваш пользовательский тип записи по разным меткам. Это показывает все метки в вашем пользовательском типе записи, в данном случае - продукты.
//Получаем массив терминов
$terms = get_the_terms( $post->ID , 'product_tags', 'string');
//Извлекаем ID, чтобы получить массив ID
$term_ids = wp_list_pluck($terms,'term_id');
//Запрос записей с tax_query. Выберите 'IN', если хотите запросить записи с любым из терминов
//Выберите 'AND', если хотите запросить записи со всеми терминами
$second_query = new WP_Query( array(
'post_type' => 'products',
'tax_query' => array(
array(
'taxonomy' => 'product_tags',
'field' => 'id',
'terms' => $term_ids,
'operator'=> 'IN' //Или 'AND' или 'NOT IN'
)),
'posts_per_page' => 3,
'ignore_sticky_posts' => 1,
'orderby' => 'rand',
'post__not_in'=>array($post->ID)
) );
//Цикл по записям и их отображение...
if($second_query->have_posts()) {
while ($second_query->have_posts() ) : $second_query->the_post(); ?>
<div class="single_related">
<?php if (has_post_thumbnail()) { ?>
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"> <?php the_post_thumbnail( 'related_sm', array('alt' => get_the_title()) ); ?> </a>
<?php } else { ?>
<a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<?php } ?>
</div>
<?php endwhile; wp_reset_query();
}
Теперь этот код помогает решить проблему с использованием пользовательских типов записей для фильтрации в пользовательской таксономии. Например, у меня была таксономия project для пользовательского типа записи. Когда я добавляю разные метки к каждому проекту, они создают таксономию tagportfolio, которая добавляет все таксономии и запрашивает их.
