Как отобразить связанные записи из родительской категории

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

Я использую следующий код для отображения связанных постов, но он показывает только посты этой категории, например, бренд показывает только посты бренда. Что я ищу, так это если я выберу любой из постов подкатегории (бренд, реклама, онлайн и т. д.), он должен отображать все посты под маркетингом, чтобы мне не пришлось присваивать нескольким постам несколько категорий.

  • Тематика
    • Маркетинг(3)
      • Бренд(1)
      • Реклама(1)
      • Онлайн(1)
<?php

$related = get_posts( array( 'category__in' => wp_get_post_categories($post->ID), 'numberposts' => 5, 'post__not_in' => array($post->ID) ) );
if( $related ) foreach( $related as $post ) {
setup_postdata($post); ?>
<ul> 
    <li>
    <a href="https://wordpress.stackexchange.com/questions/257775/<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
        <?php the_content('Читать остальную часть этого материала &raquo;'); ?>
    </li>
</ul>   

<?php } wp_reset_postdata(); ?>

Просто измените эту строку:

   $cat_obj = $wp_query->get_queried_object();
    $thiscat_id = $cat_obj->term_id;
    $thiscat = get_category($thiscat_id);
    $chi = array();
    if (!empty($thiscat->parent)) {
        $parentcat = get_category($thiscat->parent);
        $categories_chi=get_categories(
            array( 'parent' => $parentcat->cat_ID )
        );

        foreach ($categories_chi as $key => $value) {
            $chi[] = $value->cat_ID;
        }
        $pare = array($parentcat->term_id);
        $ids = array_merge($pare, $chi);
    } else {
        $ids = array($cat_obj->term_id);
    }

    $related  = get_posts(array( 'category__in' => $ids, 'numberposts' => 10));

Ответ или решение

Для отображения связанных постов из родительской категории в WordPress, вам необходимо адаптировать ваш текущий код. Ваша цель заключается в том, чтобы при выборе поста из дочерней категории (например, Бренд, Реклама, Онлайн и т.д.) отображались все посты, относящиеся к родительской категории (в данном случае Маркетинг), без необходимости присваивать постам несколько категорий.

Шаги по реализации

  1. Получение объекта текущей категории. Сначала вам необходимо получить объект текущей категории, чтобы от него можно было "отталкиваться" для получения его родителя.

  2. Определение родительской категории. После этого вы сможете получить родительскую категорию и все дочерние категории от неё.

  3. Сбор всех относящихся категорий. Скомпилируйте массив идентификаторов категорий, который будет включать как родительскую категорию, так и все дочерние категории.

  4. Запрос связанных постов. Используйте массив идентификаторов категорий для запроса связанных постов.

Пример кода

Вот как можно модифицировать ваш код:

<?php
$cat_obj = $wp_query->get_queried_object();
$thiscat_id = $cat_obj->term_id;
$thiscat = get_category($thiscat_id);
$chi = array();

if (!empty($thiscat->parent)) {
    // Получите родительскую категорию
    $parentcat = get_category($thiscat->parent);

    // Получите все дочерние категории родительской категории
    $categories_chi = get_categories(array('parent' => $parentcat->cat_ID));

    foreach ($categories_chi as $value) {
        $chi[] = $value->cat_ID; // Запишите ID дочерних категорий
    }

    // Соберите в массив ID родительской и дочерних категорий
    $ids = array_merge(array($parentcat->term_id), $chi);
} else {
    // Если родительская категория отсутствует, используйте текущую категорию
    $ids = array($cat_obj->term_id);
}

// Запрашиваем посты из собранных категорий
$related = get_posts(array(
    'category__in' => $ids,
    'numberposts' => 5,
    'post__not_in' => array($post->ID)
));

if ($related) foreach ($related as $post) {
    setup_postdata($post); ?>
    <ul>
        <li>
            <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
            <?php the_content('Читать далее &raquo;'); ?>
        </li>
    </ul>
<?php }
wp_reset_postdata();
?>

Примечания к коду

  • get_queried_object(): Эта функция позволяет получить объект текущей категории, что важно для дальнейших манипуляций.

  • get_categories(): Используется для получения дочерних категорий по идентификатору родительской категории.

  • array_merge(): Это позволяет соединить массив идентификаторов родительской и дочерних категорий в один массив.

  • setup_postdata($post): Эта строка подготавливает контекст поста для использования в цикле WordPress.

Оптимизация для SEO

Для оптимизации вашего контента с точки зрения SEO, убедитесь, что:

  1. Все ссылки ведут на актуальные и релевантные страницы.
  2. Заголовки постов содержат ключевые слова.
  3. Описание и короткие аннотации к статьям включают важные фразы, которые ваши потенциальные читатели могут искать.

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

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

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