自定义帖子类型显示属于该类别的帖子

时间:2014-08-11 06:48:57

标签: php custom-post-type wordpress wp-list-categories

我有自定义帖子类型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;任何建议都会有所帮助,谢谢

4 个答案:

答案 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_categoriesget_taxonomiesget_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(); ?>