我有自定义帖子类型advice
和分类adcat
。我想显示属于该类别的所有帖子。
让我们说我有4个类别:'游戏''旅游''菜肴''酒店'这四个类别也是一个菜单。如果我点击其中一个类别例如:酒店所有帖子都属于酒店应该显示。
顺便说一下,我用这个代码显示wordpress默认类别:
<?php $catname = wp_title('', false); ?>
<?php $posts = get_posts("category_name=$catname&numberposts=8&offset=0");
foreach ($posts as $post) : start_wp(); ?>
//html output
<h1><?php the_title(); ?></h1>
<?php endforeach; ?>
这不适用于自定义帖子分类法&#39;任何建议都会有所帮助,谢谢
答案 0 :(得分:1)
尝试这样的事情,这是按类别ID
获取帖子的示例$args = array( 'cat' => $cat_id, 'post_type' => 'advice', 'posts_per_page' => -1 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
the_title();
endwhile;
wp_reset_postdata();
您也可以使用类别名称。
$args = array('category_name' => 'catname', 'post_type' => 'advice', 'posts_per_page' => -1 );
你可以根据你的要求使用post_per_page,我刚为所有帖子添加了-1
答案 1 :(得分:1)
我不太懂你的术语。当您谈论adcat
时,它是自定义分类法还是内置分类法category
的术语。如果adcat
是自定义分类,则应使用WP_Query
中的tax_query
,而不是类别参数。
请记住,类别和自定义分类法都是分类法,他们的直接孩子称为术语,他们的直接孩子称为子术语
您也不应该使用wp_title()
来获取查询对象。您应该使用get_query_var()
来获取查询的对象。对于类别,它将为cat
,分类将为taxonomy
,而对于term
。有关返回值
get_categories
,get_taxonomies
和get_terms
实施例
$category = get_query_var( `cat` );
$cat_slug = $category->slug;
现在,您可以将$cat_slug
作为category_name
修改强>
我很快就重新考虑了整件事,并检查了你的评论。为什么不直接复制index.php并将其重命名为taxonomy.php。这里根本不需要自定义查询。 taxonomy.php中的默认循环应该这样做
编辑2
如需进一步阅读,请查看以下文章
答案 2 :(得分:1)
不确定我是否正确阅读了您的答案,但我假设您想要按照分类条款搜索帖子是否正确?因此,在您的adcat
分类标准中,您有“游戏&#39;”,“旅游”,“餐具”,“酒店”和“#39;酒店&#39;作为您的条款或类别。您最好的选择是在查询参数中使用tax_query
。以下是使用WP_Query()对象的方法。
<?php
$args = array(
'post_type' => 'advice',
'posts_per_page' => 8,
'tax_query' => array(
'taxonomy' => 'adcat',
'terms' => array('games', 'tours', 'dishes', 'hotels'),
'field' => 'slug'
)
);
$query = new WP_Query($args);
if($query->have_posts()) : while($query->have_posts()) : $query->the_post(); ?>
<h1><?php the_title(); ?></h1>
<?php endwhile; endif; ?>
<?php wp_reset_postdata(); ?>
重要提示:
使用WP_Query时,您将覆盖默认的帖子数据。因此,为了获取该数据,您只需使用wp_reset_postdata()
,如上面的示例所示,在循环结束后。
答案 3 :(得分:1)
尝试这可能有效...我写了一个便条,你可以看到最新情况......希望有所帮助
<?php
// Get the term/category of the post
$terms = get_the_terms( $post->ID , 'advice-cat' );
foreach ( $terms as $term ) {
$term_link = get_term_link( $term, 'advice cat' );
}
//WordPress loop for custom post type
$terms = get_the_terms( $post->ID , 'advice-cat' );
$my_query = new WP_Query('post_type=advice&advice-cat=' . $term->name . '&posts_per_page=-1');
while ($my_query->have_posts()) : $my_query->the_post(); ?>
// output content
<?php the_title(); ?>
<?php endwhile; wp_reset_query(); ?>