Вопрос или проблема
Я использую следующий код для отображения связанных постов, но он показывает только посты этой категории, например, бренд показывает только посты бренда. Что я ищу, так это если я выберу любой из постов подкатегории (бренд, реклама, онлайн и т. д.), он должен отображать все посты под маркетингом, чтобы мне не пришлось присваивать нескольким постам несколько категорий.
- Тематика
- Маркетинг(3)
- Бренд(1)
- Реклама(1)
- Онлайн(1)
- Маркетинг(3)
<?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('Читать остальную часть этого материала »'); ?>
</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, вам необходимо адаптировать ваш текущий код. Ваша цель заключается в том, чтобы при выборе поста из дочерней категории (например, Бренд, Реклама, Онлайн и т.д.) отображались все посты, относящиеся к родительской категории (в данном случае Маркетинг), без необходимости присваивать постам несколько категорий.
Шаги по реализации
-
Получение объекта текущей категории. Сначала вам необходимо получить объект текущей категории, чтобы от него можно было "отталкиваться" для получения его родителя.
-
Определение родительской категории. После этого вы сможете получить родительскую категорию и все дочерние категории от неё.
-
Сбор всех относящихся категорий. Скомпилируйте массив идентификаторов категорий, который будет включать как родительскую категорию, так и все дочерние категории.
-
Запрос связанных постов. Используйте массив идентификаторов категорий для запроса связанных постов.
Пример кода
Вот как можно модифицировать ваш код:
<?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('Читать далее »'); ?>
</li>
</ul>
<?php }
wp_reset_postdata();
?>
Примечания к коду
-
get_queried_object()
: Эта функция позволяет получить объект текущей категории, что важно для дальнейших манипуляций. -
get_categories()
: Используется для получения дочерних категорий по идентификатору родительской категории. -
array_merge()
: Это позволяет соединить массив идентификаторов родительской и дочерних категорий в один массив. -
setup_postdata($post)
: Эта строка подготавливает контекст поста для использования в цикле WordPress.
Оптимизация для SEO
Для оптимизации вашего контента с точки зрения SEO, убедитесь, что:
- Все ссылки ведут на актуальные и релевантные страницы.
- Заголовки постов содержат ключевые слова.
- Описание и короткие аннотации к статьям включают важные фразы, которые ваши потенциальные читатели могут искать.
Следуя этим шагам, вы сможете достичь поставленной цели и обеспечить пользователям удобный доступ к связанному контенту, что в свою очередь повысит время их нахождения на сайте и улучшит взаимодействие с вашими материалами.