¿Cómo mostrar entradas relacionadas detectando la categoría actual?

5 feb 2012, 18:22:25
Vistas: 117K
Votos: 13

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.

2
Comentarios

posible duplicado de ¿Cómo mostrar publicaciones relacionadas de la misma categoría?

kaiser kaiser
5 feb 2012 19:21:40

¿Esto responde a tu pregunta? ¿Cómo mostrar publicaciones relacionadas de la misma categoría?

Jesse Nickles Jesse Nickles
3 feb 2024 07:19:00
Todas las respuestas a la pregunta 3
12
34

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 &raquo;'); ?>
        </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 &raquo;'); ?>
5 feb 2012 18:51:25
Comentarios

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?

Felix Felix
5 feb 2012 19:01:19

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

Sufiyan Ghori Sufiyan Ghori
5 feb 2012 19:15:26

¿Puedes (quizás) cerrar la votación como duplicada?

kaiser kaiser
5 feb 2012 19:22:04

@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()

Felix Felix
5 feb 2012 19:30:50

lo siento, reemplaza 'ODD' con 'the' en el código anterior

Sufiyan Ghori Sufiyan Ghori
5 feb 2012 19:34:25

@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

Felix Felix
5 feb 2012 19:37:17

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

Sufiyan Ghori Sufiyan Ghori
5 feb 2012 19:39:16

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

Felix Felix
5 feb 2012 19:42:45

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

Sufiyan Ghori Sufiyan Ghori
5 feb 2012 19:50:41

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

Felix Felix
5 feb 2012 19:53:19

continuemos esta discusión en el chat

Felix Felix
5 feb 2012 19:53:37

Esto es mucho mejor que la respuesta a la que enlazaste

Claudiu Creanga Claudiu Creanga
4 sept 2014 04:09:48
Mostrar los 7 comentarios restantes
1

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.

2 jul 2018 14:30:01
Comentarios

Creo que esta solución es la mejor porque es reutilizable. Agrega la función en functions.php y luego llama a la función en cualquier lugar dentro de un tema activo.

Lo probé por mi cuenta y funciona.

risingPhoenix1979 risingPhoenix1979
13 may 2022 01:55:29
0

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

16 jun 2021 03:50:40