Как показать похожие записи, определив текущую категорию?
На моем сайте-галерее я хочу показывать другие изображения под текущим изображением (на странице отдельной записи). Я видел много кодов, но они требуют указать категорию вручную, а я не хочу указывать категорию вручную в коде - я хочу, чтобы код сам получал ID или название категории. Мне было бы гораздо удобнее получать полные записи вместо только заголовков записей, чтобы я мог отображать их так же, как на главной странице и странице категории.

Вопрос уже был задан, и ответ также был опубликован,
Как вывести связанные записи из той же категории?
Добавьте этот код в ваш файл single.php после цикла там, где вы хотите показать связанные записи,
<?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="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
<?php the_content('Читать далее »'); ?>
</li>
</ul>
<?php }
wp_reset_postdata(); ?>
Этот код выведет связанные записи из той же категории с заголовком и отрывком текста. Однако, если вы хотите, чтобы код отображал только заголовки связанных записей, удалите эту строку:
<?php the_content('Читать далее »'); ?>

Извините, я новичок в WordPress и PHP. Если вы не против, не могли бы вы подсказать, как вставить этот код в мой single.php??

перечитайте мой ответ, я добавил несколько дополнительных деталей (ПРОТЕСТИРОВАНО)

@Xufyan этот код показывает мне следующую ошибку, когда я использовал его после комментария Fatal error: Call to undefined function odd_title()

@Xufyan Если я уберу строку, вызывающую ошибку <?php ODD_title(30); ?>, я не получаю постов, просто пять маркеров без постов или заголовков

ошибка исправлена в коде, и теперь он работает идеально (проверено), скопируйте изменённый код из моего ответа

@Xufyan Но теперь отображается только заголовок записи с постоянной ссылкой :\ Есть идеи??

это означает, что вы удалили эту строку кода: <?php the_excerpt('Read the rest of this entry »'); ?>, верните её обратно на место

@Xufyan нет, я не убирал эту строку. Попробовал снова, но заголовок всё равно отображается с постоянной ссылкой.

давайте продолжим это обсуждение в чате

Вот еще один чистый и очень гибкий вариант:
Поместите этот код в файл functions.php
function example_cats_related_post() {
$post_id = get_the_ID();
$cat_ids = array();
$categories = get_the_category( $post_id );
if(!empty($categories) && !is_wp_error($categories)):
foreach ($categories as $category):
array_push($cat_ids, $category->term_id);
endforeach;
endif;
$current_post_type = get_post_type($post_id);
$query_args = array(
'category__in' => $cat_ids,
'post_type' => $current_post_type,
'post__not_in' => array($post_id),
'posts_per_page' => '3',
);
$related_cats_post = new WP_Query( $query_args );
if($related_cats_post->have_posts()):
while($related_cats_post->have_posts()): $related_cats_post->the_post(); ?>
<ul>
<li>
<a href="<?php the_permalink(); ?>">
<?php the_title(); ?>
</a>
<?php the_content(); ?>
</li>
</ul>
<?php endwhile;
// Восстановление оригинальных данных поста
wp_reset_postdata();
endif;
}
Теперь вы можете просто вызвать функцию в любом месте вашего сайта с помощью:
<?php example_cats_related_post() ?>
Вы можете удалить элементы списка или стилизовать их по своему усмотрению.

Это продвинутый пример для разработчиков. Он поддерживает пользовательские типы записей и таксономии, включая сопоставление по нескольким таксономиям.
// $post указывает на экземпляр WP_Post текущей записи.
$query = new WP_Query(
[
'post_type' => $relatedPostType,
'posts_per_page' => 6,
'tax_query' => buildTaxonomyForRelatedPosts($post),
'post__not_in' => [$post->ID],
]
);
// Массив связанных записей
$relatedPosts = $query->get_posts();
function buildTaxonomyForRelatedPosts(WP_Post $post) {
switch ($post->post_type) {
case 'post':
$taxonomies = ['category', 'post_tag'];
break;
case 'news':
$taxonomies = ['newscategory', 'newstags'];
break;
default:
return [];
}
$taxQuery = [
'relation' => 'OR',
];
foreach ($taxonomies as $taxonomy) {
$taxQuery[] = [
'taxonomy' => $taxonomy,
'field' => 'slug',
'terms' => array_filter(wp_get_object_terms($post->ID, $taxonomy, ['fields' => 'slugs']), function($termSlug) {
return strtolower($termSlug) !== 'uncategorized';
}),
];
}
return $taxQuery;
}
Функция buildTaxonomyForRelatedPosts
по сути строит массив со следующей структурой:
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'movie_genre',
'field' => 'slug',
'terms' => ['action', 'comedy', 'drama'],
],
[
'taxonomy' => 'actor',
'field' => 'slug',
'terms' => ['foo', 'bar', 'baz'],
],
];
https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters
