¿Cómo mostrar entradas relacionadas detectando la categoría actual?
En mi sitio de galería quiero mostrar otras imágenes debajo de la imagen actual (en una entrada individual). He visto varios códigos pero piden especificar la categoría, sin embargo no quiero especificar la categoría manualmente en el código, quiero que el código mismo obtenga el ID o nombre de la categoría. Sería mucho más fácil para mí si pudiera obtener las entradas completas en lugar de solo el título para poder mostrarlas como en la página principal y categoría.

La pregunta ya ha sido formulada y la respuesta también ha sido publicada,
¿Cómo mostrar publicaciones relacionadas de la misma categoría?
Añade este código dentro de tu single.php después del bucle donde quieras mostrar las publicaciones relacionadas,
<?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('Leer el resto de esta entrada »'); ?>
</li>
</ul>
<?php }
wp_reset_postdata(); ?>
Mostrará publicaciones relacionadas de la misma categoría con el extracto y el título de la publicación, sin embargo, si deseas que este código muestre solo el título de la publicación relacionada, entonces elimina esta línea,
<?php the_content('Leer el resto de esta entrada »'); ?>

lo siento, soy novato en WordPress y PHP. Si no te importa, ¿podrías decirme cómo poner ese código en mi single.php?

lee mi respuesta de nuevo, he añadido algunos detalles más (PROBADO)

@Xufyan ese código me muestra el siguiente error cuando lo uso después del comentario: Error fatal: Llamada a función indefinida odd_title()

@Xufyan Si elimino esa línea que causa el error <?php ODD_title(30); ?> no obtengo ninguna publicación, solo aparecen cinco viñetas sin publicaciones ni títulos

el error se ha eliminado del código y ahora funciona perfectamente (probado), copia el código modificado de mi respuesta

@Xufyan Pero ahora solo muestra el título de la publicación con el enlace permanente :\ ¿algún consejo??

significa que has eliminado esta línea de código, <?php the_excerpt('Read the rest of this entry »'); ?>, vuelve a agregarla donde estaba

@Xufyan no, no quité la línea. Lo intenté de nuevo y aún me muestra el título con el enlace permanente.

continuemos esta discusión en el chat

Aquí tienes otra opción limpia y muy flexible:
Coloca este código en tu archivo 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;
// Restaurar datos originales del post
wp_reset_postdata();
endif;
}
Ahora puedes llamar fácilmente la función en cualquier parte de tu sitio usando:
<?php example_cats_related_post() ?>
Puedes querer eliminar los elementos de lista o estilizarlos según tus necesidades.

Este es un ejemplo avanzado para desarrolladores. Soporta tipos de entradas personalizadas y taxonomías personalizadas, incluyendo coincidencias por múltiples taxonomías.
// $post apuntando a una instancia WP_Post de la entrada actual.
$query = new WP_Query(
[
'post_type' => $relatedPostType,
'posts_per_page' => 6,
'tax_query' => buildTaxonomyForRelatedPosts($post),
'post__not_in' => [$post->ID],
]
);
// El array de entradas relacionadas
$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;
}
La función buildTaxonomyForRelatedPosts
esencialmente construye un array con esta estructura:
'tax_query' => [
'relation' => 'OR',
[
'taxonomy' => 'movie_genre',
'field' => 'slug',
'terms' => ['acción', 'comedia', 'drama'],
],
[
'taxonomy' => 'actor',
'field' => 'slug',
'terms' => ['foo', 'bar', 'baz'],
],
];
https://developer.wordpress.org/reference/classes/wp_query/#taxonomy-parameters
