按自定义分类查询自定义帖子类型中的相关帖子

时间:2012-12-06 作者:chris_r

我试图通过自定义分类法显示相关帖子,并且只有使用类别的相关帖子的解决方案。

    $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, // Number of related posts that will be shown.
    \'caller_get_posts\'=>1
    ); 

    $my_query = new wp_query($args);  
    if( $my_query->have_posts() ) {  
    echo \'<div id="relatedposts" class="clearfix"><h4>Related Posts</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();
以下代码仅适用于具有已注册类别的帖子类型,而不适用于自定义分类法类型。

1 个回复
最合适的回答,由SO网友:chris_r 整理而成

好了,现在我找到了一段代码,它可以使用自定义分类来显示自定义帖子类型的相关帖子。

$terms=get\\u术语($post->ID,\'product\\u tags,\'string\');是一种自定义分类法,您应该在其中查询自定义帖子类型中的所有标记。“post\\u type”=>“products”是一种自定义帖子类型,其中调用在自定义分类法中创建的所有自定义标记,在这种情况下是product\\u标记,请在循环或查询中的任何位置输入此代码,以显示自定义帖子类型中的所有帖子。这不会根据不同的标记筛选自定义帖子类型。这将显示自定义贴子类型中的所有标记,在本例中为products。

//Get array of terms
$terms = get_the_terms( $post->ID , \'product_tags\', \'string\');
//Pluck out the IDs to get an array of IDS
$term_ids = wp_list_pluck($terms,\'term_id\');

//Query posts with tax_query. Choose in \'IN\' if want to query posts with any of the terms
//Chose \'AND\' if you want to query for posts with all terms
  $second_query = new WP_Query( array(
      \'post_type\' => \'products\',
      \'tax_query\' => array(
                    array(
                        \'taxonomy\' => \'product_tags\',
                        \'field\' => \'id\',
                        \'terms\' => $term_ids,
                        \'operator\'=> \'IN\' //Or \'AND\' or \'NOT IN\'
                     )),
      \'posts_per_page\' => 3,
      \'ignore_sticky_posts\' => 1,
      \'orderby\' => \'rand\',
      \'post__not_in\'=>array($post->ID)
   ) );

//Loop through posts and display...
    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分类法,在其中添加所有分类法并查询它们。

结束

相关推荐