Вопрос или проблема
Я написал функцию, чтобы показывать ограниченное количество недавних постов на странице, и она работает хорошо. Но я также хочу отображать только одно имя категории для каждого поста (даже если у поста есть несколько других), я просто хочу, чтобы отображалась первая [0] категория из каждого поста.
Я потратил часы на это и очень близок к решению, но в итоге получаю список постов с отображением всех категорий, как при использовании <?php the_category(" "); ?>
Я очень близок к решению с помощью следующего кода, который отображает только имя первой категории каждого поста, но не могу сделать так, чтобы он также выводил постоянную ссылку на категорию, только текстовую строку :-/
<?php
$query = new WP_Query(array(
'posts_per_page' => 2,
'categories_per_page' => 1
));
while ($query->have_posts()): $query->the_post(); ?>
<li><a href="https://wordpress.stackexchange.com/questions/244678/<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<!-- Получает имя категории, но не ссылку -->
<?php $category = get_the_category();
echo $category[0]->cat_name; ?>
<?php endwhile; ?>
Я прочитал все, что смог найти на эту тему на: https://codex.wordpress.org/Function_Reference/get_category_link
https://developer.wordpress.org/reference/functions/wp_list_categories/
Я пробовал обернуть это в постоянную ссылку, но продолжаю получать ошибки. Может кто-нибудь помочь мне? 🙂
Вам нужно передать ID категории в get_category_link()
<a href="https://wordpress.stackexchange.com/questions/244678/<?php echo esc_url( get_category_link( $category[0]->term_id ) ); ?>"><?php echo $category[0]->cat_name; ?></a>
Вот вся вещь вместе
<?php
$query = new WP_Query( array(
'posts_per_page' => 2,
'categories_per_page' => 1,
) );
while ( $query->have_posts() ) : $query->the_post(); ?>
<li><a href="https://wordpress.stackexchange.com/questions/244678/<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
$category = get_the_category();
if ( ! empty( $category ) ) {
?>
<a href="https://wordpress.stackexchange.com/questions/244678/<?php echo esc_url( get_category_link( $category[0]->term_id ) ); ?>"><?php echo $category[0]->cat_name; ?></a>
<?php
}
endwhile;
?>
Ответ или решение
Для решения вашей задачи отображения только одного названия категории на пост, даже если у поста есть несколько других категорий, вам нужно правильно использовать функции WordPress для выборки и отображения категорий. Давайте подробнее рассмотрим, как вы можете это реализовать.
Шаги для реализации
-
Использование WP_Query: Вы уже используете
WP_Query
для получения последних постов, что является правильным направлением. -
Получение категорий: Функция
get_the_category()
возвращает массив объектов, содержащих информацию о категориях поста. -
Получение ссылки на категорию: Чтобы получить ссылку на категорию, используйте
get_category_link()
и передайте ей ID категории.
Полный код
Ниже приведен пример исправленного кода, который показывает только одно название категории и включает ссылку на эту категорию:
<?php
$query = new WP_Query(array(
'posts_per_page' => 2,
));
while ($query->have_posts()) : $query->the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
</li>
<?php
$categories = get_the_category();
// Проверяем, есть ли категории у поста и берем первую
if (!empty($categories)) {
?>
<a href="<?php echo esc_url(get_category_link($categories[0]->term_id)); ?>">
<?php echo esc_html($categories[0]->cat_name); ?>
</a>
<?php
}
endwhile;
wp_reset_postdata(); // Сбрасываем глобальные данные запроса
?>
Объяснение ключевых моментов
-
the_permalink()
: Эта функция отвечает за получение URL текущего поста. -
get_the_category()
: Возвращает массив объектов категорий, к которым принадлежит пост. Мы используем первый элемент массива ($categories[0]
), чтобы получить первую категорию. -
get_category_link()
: Используется для получения ссылки на категорию. Вы передаете ID категории ($categories[0]->term_id
) в эту функцию. -
esc_url()
иesc_html()
: Эти функции используются для безопасности — они экранируют URL и текстовые значения соответственно, предотвращая возможные уязвимости. -
wp_reset_postdata()
: Эта функция сбрасывает глобальные переменные поста после использования пользовательского запроса, что полезно для выполнения других запросов после.
Заключение
Теперь код отображает только одну категорию для каждого поста, включающую в себя прямую ссылку на эту категорию. Это позволит вам поддерживать чистоту вашего дизайна и обеспечить удобство навигации для пользователей.
Если у вас возникнут дополнительные вопросы или вы столкнетесь с другими проблемами, не стесняйтесь обращаться за помощью!