Отображать категорию поста в цикле WordPress

#wordpress

Вопрос:

Я хочу показать категории, к которым относится сообщение, в цикле моего основного сообщения. Я просмотрел Stackoverflow, но ответы, похоже, не работают или ничего не отображают. Я пытаюсь сделать следующее:

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php 
        $id = get_the_ID();
        $cats = wp_get_post_categories($id);
    ?>
                    <?php foreach ( $cats as $cat ): ?>
                        <a href="<?php echo get_category_link($cat->cat_ID); ?>">
                            <?php echo $cat->name; ?>
                        </a>
                    <?php endforeach; ?>

                    <h5 class="card-title"><?php the_title(); ?></h5>
                    <p class="card-text"><?php the_excerpt(); ?></p>

<?php endwhile; else: ?>

    <p>Sorry, this page does not exist</p>

<?php endif; ?>
 

Я не могу понять, что здесь происходит не так.

Ответ №1:

Проблема в том, что wp_get_post_categories возвращает массив идентификаторов терминов. В вашем foreach вы используете $cat->XXX для ссылки и имя. Однако $cat это не объект. Тебе нужен еще один шаг.

Вам нужно использовать get_category , чтобы получить фактический объект категории.

 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php 
        $id = get_the_ID();
        $cats = wp_get_post_categories($id);
    ?>
                    <?php foreach ( $cats as $cat ): 
                        // This is the new line.
                        $cat_object = get_category( $cat );
                     ?>

                        <a href="<?php echo get_category_link($cat_object->cat_ID); ?>">
                            <?php echo $cat_object->name; ?>
                        </a>
                    <?php endforeach; ?>

                    <h5 class="card-title"><?php the_title(); ?></h5>
                    <p class="card-text"><?php the_excerpt(); ?></p>

<?php endwhile; else: ?>

    <p>Sorry, this page does not exist</p>

<?php endif; ?>