Come mostrare articoli correlati rilevando la categoria corrente?

5 feb 2012, 18:22:25
Visualizzazioni: 117K
Voti: 13

Nel mio sito con galleria voglio mostrare altre immagini sotto l'immagine corrente (nel post singolo). Ho visto diversi codici ma richiedono di specificare la categoria manualmente, mentre io non voglio specificare la categoria nel codice ma vorrei che il codice stesso ottenesse l'ID o il nome della categoria. Sarebbe molto più semplice per me ottenere i post completi invece dei soli titoli, così da poterli visualizzare come nella home e nelle pagine categoria.

2
Commenti

possibile duplicato di Come mostrare articoli correlati della stessa categoria?

kaiser kaiser
5 feb 2012 19:21:40

Questa risposta risolve il tuo problema? Come mostrare articoli correlati della stessa categoria?

Jesse Nickles Jesse Nickles
3 feb 2024 07:19:00
Tutte le risposte alla domanda 3
12
34

La domanda è già stata posta e la risposta è stata pubblicata,

Come visualizzare articoli correlati dalla stessa categoria?

Aggiungi questo codice all'interno del tuo single.php dopo un loop, dove vuoi mostrare gli articoli correlati,

<?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('Leggi il resto di questo articolo &raquo;'); ?>
        </li>
    </ul>   
<?php }
wp_reset_postdata(); ?>

Mostrerà gli articoli correlati dalla stessa categoria con l'estratto e il titolo del post, tuttavia se vuoi che questo codice mostri solo il titolo dell'articolo correlato, rimuovi questa riga,

<?php the_content('Leggi il resto di questo articolo &raquo;'); ?>
5 feb 2012 18:51:25
Commenti

scusa sono un principiante in WordPress e PHP. Se non ti dispiace, potresti dirmi come inserire quel codice nel mio single.php??

Felix Felix
5 feb 2012 19:01:19

rileggi la mia risposta, ho aggiunto qualche dettaglio in più (TESTATO)

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

Puoi (forse) chiudere il voto come duplicato?

kaiser kaiser
5 feb 2012 19:22:04

@Xufyan quel codice mi mostra il seguente errore quando l'ho usato dopo il commento Errore fatale: Call to undefined function odd_title()

Felix Felix
5 feb 2012 19:30:50

scusa, sostituisci 'ODD' con 'the' nel codice sopra

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

@Xufyan Se tolgo quella linea che causa l'errore <?php ODD_title(30); ?> non ottengo alcun post, solo cinque punti elenco senza post o titolo

Felix Felix
5 feb 2012 19:37:17

l'errore è stato rimosso dal codice e ora funziona perfettamente (testato), copia il codice modificato dalla mia risposta

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

@Xufyan Ma ora mostra solo il titolo del post con il permalink :\ qualche suggerimento??

Felix Felix
5 feb 2012 19:42:45

significa che hai rimosso questa riga di codice, <?php the_excerpt('Read the rest of this entry »'); ?>, reinseriscila dove era

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

@Xufyan no, non ho rimosso quella riga. Ho riprovato ma continua a mostrarmi il titolo con il permalink.

Felix Felix
5 feb 2012 19:53:19

continuiamo questa discussione nella chat

Felix Felix
5 feb 2012 19:53:37

Questa soluzione è molto migliore rispetto alla risposta a cui hai linkato

Claudiu Creanga Claudiu Creanga
4 set 2014 04:09:48
Mostra i restanti 7 commenti
1

Ecco un'altra opzione pulita e molto flessibile:

Inserisci questo codice nel tuo file 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;

        // Ripristina i dati originali del post
        wp_reset_postdata();
     endif;

}

Ora puoi semplicemente chiamare la funzione ovunque nel tuo sito usando:

<?php example_cats_related_post() ?>

Potresti voler rimuovere gli elementi della lista o stilizzarli secondo le tue esigenze.

2 lug 2018 14:30:01
Commenti

Penso che questa soluzione sia la migliore perché è riutilizzabile. Aggiungi la funzione in functions.php e poi chiamala ovunque in un tema attivo.

L'ho provata personalmente e funziona.

risingPhoenix1979 risingPhoenix1979
13 mag 2022 01:55:29
0

Questo è un esempio avanzato per sviluppatori. Supporta tipi di post personalizzati e tassonomie personalizzate, inclusi i match tramite più tassonomie.

// $post punta a un'istanza WP_Post del post corrente.

$query = new WP_Query(
    [
        'post_type'      => $relatedPostType,
        'posts_per_page' => 6,
        'tax_query'      => buildTaxonomyForRelatedPosts($post),
        'post__not_in'   => [$post->ID],
    ]
);

// L'array dei post correlati
$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 funzione buildTaxonomyForRelatedPosts costruisce essenzialmente un array con questa struttura:

'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

16 giu 2021 03:50:40