如何显示自定义帖子类型的分类?

问题描述

这里我们注册了 Spotlights CPT 和 CPT 的分类

<?PHP
    /*
     * Register Spotlight CPT
     */
    add_action( 'init','register_spotlights',0 );
    
    function register_spotlights() {
    
        $spotlight_labels = array(
            'name'                => _x( 'Spotlights','Post Type General Name','' ),'singular_name'       => _x( 'Spotlight','Post Type Singular Name','menu_name'           => __( 'Spotlights','parent_item_colon'   => __( 'Parent Item:' ),'all_items'           => __( 'All Spotlights','view_item'           => __( 'View Spotlight','add_new_item'        => __( 'Add New','add_new'             => __( 'Add New','edit_item'           => __( 'Edit Spotlight','update_item'         => __( 'Update Spotlight','search_items'        => __( 'Search Spotlight','not_found'           => __( 'Not found','not_found_in_trash'  => __( 'Not found in Trash',);
        $spotlight_args = array(
            'label'               => __( 'Spotlight','description'         => __( 'Holds spotlights','labels'              => $spotlight_labels,'supports'            => array( 'title','thumbnail','custom-fields'),'hierarchical'        => false,'public'              => true,'show_ui'             => true,'show_in_menu'        => true,'show_in_nav_menus'   => true,'show_in_admin_bar'   => true,'menu_position'       => 6,'menu_icon'           => 'dashicons-admin-post','can_export'          => true,'has_archive'         => false,'exclude_from_search' => false,'publicly_queryable'  => true,'capability_type'     => 'page','rewrite'             => array( 'slug' => 'spotlight','with_front' => false),);
        register_taxonomy(
            'category-spotlight','spotlight',array(
                'hierarchical' => true,'labels' => array(
                    'name' => 'Category','singular_name' => 'Category'
                ),'show_ui' => true,'show_admin_column' => true,'public' => false,'query_var' => false,'show_in_rest' => true,'rewrite' => false
            )
        );
        register_post_type( 'spotlight',$spotlight_args);
    }

这是我们添加CPT的循环,我们如何在此处显示分类类别?

<?PHP
    $args = array(
        'post_type' => 'spotlight','orderby' => 'date','order' => 'DESC','posts_per_page' => 2
    );
  
    $query = new WP_Query( $args ); 
    $taxonomy = 'category-spotlight';
    $terms = get_terms($taxonomy); // Get all terms of a taxonomy
   
    if ($query->have_posts()): ?>
        <?PHP while ($query->have_posts()): $query->the_post(); ?>
            <div class="category"><?PHP echo $terms->name; ?></div>
            <h3 class="small"><?PHP the_title(); ?></h2>
        <?PHP endwhile; ?>
    <?PHP endif; ?>

我想显示如下内容标题1 类别1

标题2 类别2

当前显示的是每个帖子的标题,但不显示每个帖子的分类。 每个标题下的分类如何显示

解决方法

根据 documentationget_terms 将返回 WP_Term 对象或 WP_Error 的数组。在您的代码中,您有 $terms->name。您需要让它选择找到的第一个术语,在这种情况下您将需要 $terms[0]->name,或者您需要添加一些逻辑以获得您想要显示的正确术语。

此外,您加载的条款不一定与帖子相关。如果您想加载用于帖子的术语,您需要调用 get_the_terms($post,$taxonomy) 以获取关联帖子的关联分类术语。同样,它将是数组的返回类型,因此请确保提取正确的值。

,

用这个替换你的代码。我希望这对你有用。

<?php 
if ($query->have_posts()): ?>
    <?php while ($query->have_posts()): $query->the_post(); ?>
        <div class="category"><?php echo $terms->name; ?></div>
        <h3 class="small"><?php the_title(); ?></h2>
        <?php 
            $category_spotlight = get_the_terms( get_the_ID(),'category-spotlight' );
            foreach( $category_spotlight as $category_spot ) {
                echo $category_spot->name;
            }
        ?>
    <?php endwhile; ?>
<?php endif; ?>