Cum să afișezi articole similare detectând categoria curentă?
Pe site-ul meu de galerie vreau să afișez alte imagini sub imaginea curentă (în postarea individuală). Am văzut mai multe coduri, dar acestea cer specificarea categoriei, însă eu nu vreau să specific manual categoria în cod. Vreau ca codul să preia automat ID-ul sau numele categoriei. Ar fi mult mai ușor pentru mine dacă aș putea obține articolele complete în loc de doar titlurile lor, astfel încât să le pot afișa ca pe pagina principală și în categorie.

Întrebarea a fost deja pusă și răspunsul a fost publicat de asemenea,
Cum să afișezi articole similare din aceeași categorie?
Adaugă acest cod în fișierul tău single.php după buclă oriunde dorești să afișezi articole similare,
<?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('Citește restul acestui articol »'); ?>
</li>
</ul>
<?php }
wp_reset_postdata(); ?>
Acesta va afișa articole similare din aceeași categorie împreună cu rezumatul și titlul articolului, dacă dorești ca acest cod să afișeze doar titlul articolelor similare, atunci elimină această linie,
<?php the_content('Citește restul acestui articol »'); ?>

scuze, sunt începător în WordPress și PHP. Dacă nu te deranjează, poți să-mi spui cum să introduc acel cod în single.php??

citește din nou răspunsul meu, am adăugat câteva detalii suplimentare (TESTAT)

@Xufyan acel cod îmi arată următoarea eroare când l-am folosit după comentariu: Fatal error: Call to undefined function odd_title()

@Xufyan Dacă elimin linia care cauza eroarea <?php ODD_title(30); ?>, nu primesc niciun post, primesc doar cinci puncte fără post sau titlu

eroarea a fost eliminată din cod și acum funcționează perfect (Testat), copiază codul modificat din răspunsul meu

@Xufyan Dar acum afișează doar titlul articolului cu link-ul permanent :\ ai vreo sugestie??

înseamnă că ai eliminat această linie de cod, <?php the_excerpt('Citește restul acestei intrări »'); ?>, adaug-o înapoi unde era

@Xufyan nu, nu am eliminat linia. Am încercat din nou și în continuare îmi afișează titlul cu linkul permanent.

hai să continuăm această discuție în chat

Iată o altă opțiune curată și foarte flexibilă:
Puneți acest cod în fișierul 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;
// Restaurarea datelor originale Post
wp_reset_postdata();
endif;
}
Acum puteți apela simplu funcția oriunde pe site folosind:
<?php example_cats_related_post() ?>
Poate doriți să eliminați elementele de listă sau să le stilizați după nevoile dumneavoastră.

Acesta este un exemplu avansat pentru dezvoltatori. Suportă tipuri de postări personalizate și taxonomii personalizate, inclusiv potriviri după mai multe taxonomii.
// $post indică o instanță WP_Post a postării curente.
$query = new WP_Query(
[
'post_type' => $relatedPostType,
'posts_per_page' => 6,
'tax_query' => buildTaxonomyForRelatedPosts($post),
'post__not_in' => [$post->ID],
]
);
// Array-ul cu postări înrudite
$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;
}
Funcția buildTaxonomyForRelatedPosts
construiește în esență un array cu următoarea structură:
'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
