Запрос связанных записей в произвольном типе записей по произвольной таксономии

6 дек. 2012 г., 07:06:06
Просмотры: 22.7K
Голосов: 4

Я пытаюсь отобразить связанные записи по произвольной таксономии, но у меня есть только решение для связанных записей с использованием категории.

    $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();

Следующий код работает только для типов записей с зарегистрированной категорией, но не для произвольных типов таксономии.

2
Комментарии

Не уверен, связано ли это, но похоже, что аргумент caller_get_posts устарел: http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Cyclonecode Cyclonecode
6 дек. 2012 г. 20:59:10

Размещение вопросов с собственными ответами, которые описывают решение проблемы или задачи, это отлично, так что спасибо за это! К сожалению, из вашего вопроса сложно понять, в чём именно заключается решаемая проблема/задача. Не могли бы вы переписать вопрос, чтобы лучше описать проблему/задачу?

Chip Bennett Chip Bennett
7 дек. 2012 г. 03:25:43
Все ответы на вопрос 1
1
11

Хорошо, теперь я нашел код, который позволяет использовать пользовательскую таксономию для отображения связанных записей для пользовательского типа записи.

  1. $terms = get_the_terms( $post->ID , 'product_tags', 'string'); - это пользовательская таксономия, которую нужно использовать для запроса всех меток в вашем пользовательском типе записи
  2. '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, которая добавляет все таксономии и запрашивает их.

7 дек. 2012 г. 03:19:25
Комментарии

Отлично, практически спасло мне жизнь, огромное спасибо за такое простое решение.

Jodyshop Jodyshop
17 сент. 2021 г. 02:30:00