显示特定类别术语的帖子

时间:2014-06-29 作者:davidcondrey

我使用这段代码首先将每个类别术语显示为标题,然后显示一篇文章,该文章分配给标题下的每个类别术语。

如果我创建自定义分类法,它会按预期工作,但如果我尝试使用默认类别分类法,标题会按预期显示,但在每个标题下,它会显示每篇文章,而不考虑指定的术语。我不明白为什么它适用于我的自定义分类法,但不适用于默认类别分类法。

<?php $args = array (
    \'orderby\'    => \'name\',
    \'order\'      => \'ASC\',
    \'hide_empty\' => true,
);

$terms = get_terms( \'category\', $args );
foreach ( $terms as $term ) {
    echo $term->name;

    $post_args = array (
        \'category\' => $term->name,
        \'posts_per_page\'   => \'1\',
        \'no_found_rows\' => true
    );

    $query = new WP_Query( $post_args );

    while ( $query->have_posts() ) {
        $query->the_post(); ?>

        <?php the_title(); ?>
        <?php the_excerpt(); ?>

    <?php }
}
如果在本例中我将其更改为使用名为“article\\u subjects”的自定义分类法,则一切都会正常工作。

<?php $args = array (
    \'orderby\'    => \'name\',
    \'order\'      => \'ASC\',
    \'hide_empty\' => true,
);

$terms = get_terms( \'article_subjects\', $args );
foreach ( $terms as $term ) {
    echo $term->name;

    $post_args = array (
        \'article_subjects\' => $term->name,
        \'posts_per_page\'   => \'1\',
        \'no_found_rows\' => true
    );

    $query = new WP_Query( $post_args );

    while ( $query->have_posts() ) {
        $query->the_post(); ?>

        <?php the_title(); ?>
        <?php the_excerpt(); ?>

    <?php }
}
为了以防万一,这是我用来生成自定义分类法的代码。

function article_subjects() {
$labels = array(
    \'name\'                       => _x( \'Subjects\', \'Taxonomy General Name\', \'dc\' ),
    \'singular_name\'              => _x( \'Subject\', \'Taxonomy Singular Name\', \'dc\' ),
    \'menu_name\'                  => __( \'Subjects\', \'dc\' ),
    \'all_items\'                  => __( \'All Items\', \'dc\' ),
    \'parent_item\'                => __( \'Parent Item\', \'dc\' ),
    \'parent_item_colon\'          => __( \'Parent Item:\', \'dc\' ),
    \'new_item_name\'              => __( \'New Subject\', \'dc\' ),
    \'add_new_item\'               => __( \'Add New Item\', \'dc\' ),
    \'edit_item\'                  => __( \'Edit Item\', \'dc\' ),
    \'update_item\'                => __( \'Update Item\', \'dc\' ),
    \'separate_items_with_commas\' => __( \'Separate items with commas\', \'dc\' ),
    \'search_items\'               => __( \'Search Items\', \'dc\' ),
    \'add_or_remove_items\'        => __( \'Add or remove items\', \'dc\' ),
    \'choose_from_most_used\'      => __( \'Choose from the most used items\', \'dc\' ),
    \'not_found\'                  => __( \'Not Found\', \'dc\' ),
);
$args = array(
    \'labels\'                     => $labels,
    \'hierarchical\'               => false,
    \'public\'                     => true,
    \'show_ui\'                    => true,
    \'show_admin_column\'          => true,
    \'show_in_nav_menus\'          => true,
    \'show_tagcloud\'              => true,
    \'has_archive\'                => true,
    \'can_export\'                 => true

);
register_taxonomy( \'article_subjects\', array( \'post\' ), $args );
}
add_action( \'init\', \'article_subjects\', 0 );

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

您的问题在于第一段代码中的这一行代码

\'category\' => $term->name,
这里有两个问题,首先,category 不是的有效参数WP_Query, 您应该使用category_name, 当您与一起工作时get_terms. get_terms 不返回ID,如get_categories, 这是代码第一部分的备选方案。其次,如果您使用category_name, 记住,这是这一类的鼻涕虫,not the category name

所以更换

\'category\' => $term->name,
使用

\'category_name\' => $term->slug,
如前所述,您还可以使用get_categories, 所以你也可以这样做

<?php $args = array (
    \'orderby\'    => \'name\',
    \'order\'      => \'ASC\',
    \'hide_empty\' => true,
);

$categories = get_categories( $args );
foreach ( $categories as $category ) {
    echo $category->name;

    $post_args = array (
        \'cat\' => $category->cat_ID,
        \'posts_per_page\'   => \'1\',
   );

    $query = new WP_Query( $post_args );

    while ( $query->have_posts() ) {
        $query->the_post(); ?>

        <?php the_title(); ?>
        <?php the_excerpt(); ?>

    <?php }
    wp_reset_postdata();
}

?>
需要指出的是,您正在将一些无效参数传递给register_taxonomy. 请检查法典中的有效参数

EDIT

从你的评论来看,我认为你错过了闭幕式endif; 要显示the_post_thumbnail, 您的代码如下所示

if ( has_post_thumbnail() ) :
  the_post_thumbnail();
endif;
还有一件事我昨天忘了提,你应该总是重置postdata(wp_reset_postdata)使用自定义查询时

结束

相关推荐

Display Custom Posts

我已经创建了名为“review”的自定义帖子。从WP管理员我可以创建这些自定义帖子。但要在用户端显示它们,我面临一个问题。在开发插件时,我不想在主题中创建模板。这是我用来显示自定义帖子的代码。但它显示的是404模板。function review_template_function($template_path){ global $post; if(get_query_var(\'post_type\') == \'review\'){ if(is_single()){&#