在single.php上,我有一个标准的WP循环,用于显示帖子内容。
<main>
<div class="container">
<?php if (have_posts()): while (have_posts()) : the_post(); ?>
<article>
<div class="col-md-12">
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</div>
</article>
<?php endwhile; ?>
<?php endif; ?>
</div>
</main>
在它下面,我有一个简单的循环,显示3个最新的自定义帖子类型项目
<div class="manuals">
<?php
$loop = new WP_Query( array(
'post_type' => 'manuals',
'posts_per_page' => 3
)
);
?>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="col-md-12">
<?php if ( has_post_thumbnail()) : // Check if Thumbnail exists ?>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
<?php the_post_thumbnail(); // Fullsize image for the single post ?>
</a>
<?php endif; ?>
<h5><?php the_title(); ?></h5>
</div>
<?php endwhile; wp_reset_query(); ?>
</div>
帖子和自定义帖子类型都共享2个WP类别(简单,高级)。 如果用户打开在“高级”类别中发布的文章,我希望自定义帖子类型仅显示“高级”类别中的帖子...
希望您能理解我的意思,英语不是我的母语……谢谢您的帮助!
答案 0 :(得分:0)
如果我理解您的意思,那么您的简单/高级类别是互斥的,因此您可以假设当前博客文章中只有一个类别。假设是这种情况,您首先要使用get_the_terms()
获取当前帖子的类别,然后通过tax_query
将该类别传递给自定义查询。
类似的事情应该起作用:
// main loop up here...
// get terms (categories) from the current post
$cats = get_the_terms($post->ID, 'category');
// default args for querying our manual posts
$manuals_query_args = array(
'post_type' => 'manuals',
'posts_per_page' => 3
);
// filter manuals by category, if and only if current post is categorized
if (isset($cats[0])) {
$cat_id = $cats[0]->term_id;
$manuals_query_args['tax_query'] = array(
// note that tax_query needs to be an *array of arrays* -
// in this case, an array containing just one array
array(
'taxomony' => 'category',
'field' => 'id',
'terms' => $cat_id
)
);
}
$loop = new WP_Query($manuals_query_args);
您可能需要调整它,我没有测试此代码。