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