Показывать только одно название категории на пост.

Вопрос или проблема

Я написал функцию, чтобы показывать ограниченное количество недавних постов на странице, и она работает хорошо. Но я также хочу отображать только одно имя категории для каждого поста (даже если у поста есть несколько других), я просто хочу, чтобы отображалась первая [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 для выборки и отображения категорий. Давайте подробнее рассмотрим, как вы можете это реализовать.

Шаги для реализации

  1. Использование WP_Query: Вы уже используете WP_Query для получения последних постов, что является правильным направлением.

  2. Получение категорий: Функция get_the_category() возвращает массив объектов, содержащих информацию о категориях поста.

  3. Получение ссылки на категорию: Чтобы получить ссылку на категорию, используйте 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(); // Сбрасываем глобальные данные запроса
?>

Объяснение ключевых моментов

  1. the_permalink(): Эта функция отвечает за получение URL текущего поста.

  2. get_the_category(): Возвращает массив объектов категорий, к которым принадлежит пост. Мы используем первый элемент массива ($categories[0]), чтобы получить первую категорию.

  3. get_category_link(): Используется для получения ссылки на категорию. Вы передаете ID категории ($categories[0]->term_id) в эту функцию.

  4. esc_url() и esc_html(): Эти функции используются для безопасности — они экранируют URL и текстовые значения соответственно, предотвращая возможные уязвимости.

  5. wp_reset_postdata(): Эта функция сбрасывает глобальные переменные поста после использования пользовательского запроса, что полезно для выполнения других запросов после.

Заключение

Теперь код отображает только одну категорию для каждого поста, включающую в себя прямую ссылку на эту категорию. Это позволит вам поддерживать чистоту вашего дизайна и обеспечить удобство навигации для пользователей.

Если у вас возникнут дополнительные вопросы или вы столкнетесь с другими проблемами, не стесняйтесь обращаться за помощью!

Оцените материал
Добавить комментарий

Капча загружается...