0

I am using the free version of WP Blog and Widget plugin for my blog. It's working perfectly.

My issue is, I have to display the current post category name on my single page. So I tried below code on a single.php page to check the category name.

$cat = get_the_category();
print_r($cat);

but I am not getting the category name. I am getting an empty array.

Array ( )

How can I fix this problem?

Single.php

<?php
    /**
     * The template for displaying all single posts
     *
     * @link https://developer.wordpress.org/themes/basics/template-hierarchy/#single-post
     *
     * @package WordPress
     * @subpackage Twenty_Nineteen
     * @since 1.0.0
     */

    get_header();
?>

<section id="primary" class="content-area">
    <main id="main" class="site-main">

        <?php
            /* Start the Loop */
            while ( have_posts() ) :
                the_post();

            $cats = array();
            foreach (get_the_category($post_id) as $c) {
                $cat = get_category($c);
                array_push($cats, $cat->name);
            }

            if (sizeOf($cats) > 0) {
                $post_categories = implode(', ', $cats);
            } else {
                $post_categories = 'Not Assigned';
            }
            echo $post_categories;


            get_template_part( 'template-parts/content/content', 'single' );

            if ( is_singular( 'attachment' ) ) {
                // Parent post navigation.
                the_post_navigation(
                    array(
                        /* translators: %s: parent post link */
                        'prev_text' => sprintf( __( '<span class="meta-nav">Published in</span><span class="post-title">%s</span>', 'twentynineteen' ), '%title' ),
                    )
                );
            } elseif ( is_singular( 'post' ) ) {
                // Previous/next post navigation.
                the_post_navigation(
                    array(
                        'next_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Next Post', 'twentynineteen' ) . '</span> ' .
                            '<span class="screen-reader-text">' . __( 'Next post:', 'twentynineteen' ) . '</span> <br/>' .
                            '<span class="post-title">%title</span>',
                        'prev_text' => '<span class="meta-nav" aria-hidden="true">' . __( 'Previous Post', 'twentynineteen' ) . '</span> ' .
                            '<span class="screen-reader-text">' . __( 'Previous post:', 'twentynineteen' ) . '</span> <br/>' .
                            '<span class="post-title">%title</span>',
                    )
                );
            }

            // If comments are open or we have at least one comment, load up the comment template.
            if ( comments_open() || get_comments_number() ) {
                comments_template();
            }

            endwhile; // End of the loop.
        ?>

        </main><!-- #main -->
    </section><!-- #primary -->

<?php
    get_footer();
12
  • Where are you displaying the category name? in the post loop or outside the post loop, like widget?
    – Atif Aqeel
    Commented Apr 20, 2020 at 15:01
  • @AtifAqeel, I have to display the category name on my single.php page. Commented Apr 20, 2020 at 15:03
  • get_the_category() gets terms from the category taxonomy. The plugin that you linked creates a custom post type, so are you sure it's not also creating a separate taxonomy for 'blog categories'? If your post has custom taxonomy terms you need to use get_the_terms(), not get_the_category(). Commented Apr 20, 2020 at 15:24
  • @JacobPeattie, Let me try your above comment. Commented Apr 20, 2020 at 15:27
  • @NarenVerma Keep in mind that if you use get_the_terms() you need to provide the taxonomy name, which I don't know. Check the URL of the edit screen for those categories. It should include the taxonomy name. Commented Apr 20, 2020 at 15:28

1 Answer 1

2

You can you just simply put this code into your singl.php

foreach((get_the_category()) as $category) 
{
    echo $category->cat_name . ' '; 
}
14
  • Thanks for the answer, but I am getting only Not Assigned Commented Apr 20, 2020 at 15:07
  • so you have assign the category?
    – Atif Aqeel
    Commented Apr 20, 2020 at 15:09
  • Yes, I have category and I already assigned. Commented Apr 20, 2020 at 15:10
  • did you put the code inside the while loop?
    – Atif Aqeel
    Commented Apr 20, 2020 at 15:11
  • Yes, I added inslide while ( have_posts() ) : Please check my code. I updated in the question. Commented Apr 20, 2020 at 15:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.