Come mostrare articoli correlati rilevando la categoria corrente?
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.

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 »'); ?>
</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 »'); ?>

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

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

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

@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

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

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

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

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

continuiamo questa discussione nella chat

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.

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
