Cum să afișezi articole similare detectând categoria curentă?

5 feb. 2012, 18:22:25
Vizualizări: 117K
Voturi: 13

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.

2
Comentarii

posibil duplicat al Cum se afișează articole similare din aceeași categorie?

kaiser kaiser
5 feb. 2012 19:21:40

Acest răspuns îți rezolvă întrebarea? Cum se afișează articole similare din aceeași categorie?

Jesse Nickles Jesse Nickles
3 feb. 2024 07:19:00
Toate răspunsurile la întrebare 3
12
34

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

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??

Felix Felix
5 feb. 2012 19:01:19

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

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

Poți (poate) să închizi votul ca fiind duplicat?

kaiser kaiser
5 feb. 2012 19:22:04

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

Felix Felix
5 feb. 2012 19:30:50

scuze, înlocuiește 'ODD' cu 'the' în codul de mai sus

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

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

Felix Felix
5 feb. 2012 19:37:17

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

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

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

Felix Felix
5 feb. 2012 19:42:45

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

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

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

Felix Felix
5 feb. 2012 19:53:19

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

Felix Felix
5 feb. 2012 19:53:37

Aceasta este mult mai bună decât răspunsul la care ai făcut link

Claudiu Creanga Claudiu Creanga
4 sept. 2014 04:09:48
Arată celelalte 7 comentarii
1

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ă.

2 iul. 2018 14:30:01
Comentarii

Cred că această soluție este cea mai bună pentru că este reutilizabilă. Adaugă funcția în functions.php apoi apelează funcția oriunde într-o temă activă.

Am încercat-o eu însumi și funcționează.

risingPhoenix1979 risingPhoenix1979
13 mai 2022 01:55:29
0

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

16 iun. 2021 03:50:40