skip to Main Content

Here we register the Spotlights CPT and the taxonomy of the 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);
    }

Here is the loop where we add the CPT, how do we display the taxonomy category here?

<?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; ?>

I want to display something like:
Title1
Category1

Title2
Category2

Currently the title for each post is displayed, but not the taxonomy for each post.
How do display the taxonomy under each title?

2

Answers


  1. According to the documentation, get_terms will return an array of WP_Term objects or WP_Error. In your code, you have $terms->name. You’ll need to either have it select the first term found in which case you’ll need $terms[0]->name, or you’ll need to add some logic to get the correct term you want to display.

    Additionally, the terms you are loading are not necessarily related to the post. If you want to load the terms used for the post, you’ll need to call get_the_terms($post, $taxonomy) to get the associated taxonomy term(s) with the associated post. Once again, it’ll be a return type of an array, so make sure to extract the correct value.

    Login or Signup to reply.
  2. Replace your code with this. i hope this work for you.

    <?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; ?>
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search