Gruparea rezultatelor căutării după tipul postării?

20 mar. 2015, 18:08:34
Vizualizări: 14.8K
Voturi: 9

Site-ul meu are 3 tipuri unice de postări:

  • Articole standard ("post")
  • Tip personalizat "lesson" (lecție)
  • Tip personalizat "series" (serie)

Când utilizatorii caută pe site, aș dori să apară rezultate relevante din toate cele 3 tipuri de postări pe pagina de rezultate. Rezultatele pentru "post" să fie într-un container, cele pentru "lesson" într-un alt container separat etc. Cum pot modifica pagina de căutare pentru a realiza acest lucru?

Iată bucla mea curentă:

<?php get_header(); ?>
<div class="row">
    <div class="small-12 large-8 columns" role="main">

        <?php do_action('foundationPress_before_content'); ?>

        <h2><?php _e('Rezultate căutare pentru', 'FoundationPress'); ?> "<?php echo get_search_query(); ?>"</h2>

    <?php if ( have_posts() ) : ?>

        <?php while ( have_posts() ) : the_post(); ?>
            <?php if( get_post_type() == 'lesson' ) {
                    get_template_part('content', 'lesson');
                } else if ( get_post_type() == 'post' ) {
                    get_template_part('content', get_post_format());
                }
            ?>
        <?php endwhile; ?>

        <?php else : ?>
            <?php get_template_part( 'content', 'none' ); ?>

    <?php endif;?>

    <?php do_action('foundationPress_before_pagination'); ?>

    <?php if ( function_exists('FoundationPress_pagination') ) { FoundationPress_pagination(); } else if ( is_paged() ) { ?>

        <nav id="post-nav">
            <div class="post-previous"><?php next_posts_link( __( '&larr; Postări mai vechi', 'FoundationPress' ) ); ?></div>
            <div class="post-next"><?php previous_posts_link( __( 'Postări mai noi &rarr;', 'FoundationPress' ) ); ?></div>
        </nav>
    <?php } ?>

    <?php do_action('foundationPress_after_content'); ?>

    </div>
    <?php get_sidebar(); ?>

<?php get_footer(); ?>
2
Comentarii

Nu folosi elseif, folosește doar if. În acest fel, toate șabloanele vor fi afișate.

Ciprian Ciprian
20 mar. 2015 18:52:38

Nu cred că diferența dintre if și elseif va conta în acest caz.

s_ha_dum s_ha_dum
25 mar. 2015 18:04:04
Toate răspunsurile la întrebare 1
8
21

Puteți rula aceeași buclă de mai multe ori folosind rewind_posts() pentru a afișa fiecare tip separat.

if( have_posts() ){
    $types = array('post', 'lesson', 'series');
    foreach( $types as $type ){
        echo 'containerul tău se deschide aici pentru ' . $type;
        while( have_posts() ){
            the_post();
            if( $type == get_post_type() ){
                get_template_part('content', $type);
            }
        }
        rewind_posts();
        echo 'containerul tău se închide aici pentru ' . $type;
    }
}
20 mar. 2015 20:54:48
Comentarii

Salut -- problema este că trebuie să stochez fiecare tip de postare în propriul container (folosesc o interfață cu file, așa că dacă apasă pe fila "lecție" vor obține toate videoclipurile de tip "lecție" care se potrivesc cu căutarea lor, etc.) Nu sunt sigur cum să adaptez metoda ta la asta

tdc tdc
21 mar. 2015 03:01:27

da, asta am presupus și, acesta este scopul acestui exemplu. poți pune orice markup de container dorești între buclele foreach și while.

Milo Milo
21 mar. 2015 03:54:51

Ah, înțeleg acum cu postarea editată, mulțumesc. Știi dacă acest lucru va funcționa corect și cu paginarea?

tdc tdc
23 mar. 2015 15:55:46

acest lucru va sorta postările doar pe baza fiecărei pagini, iar paginarea va funcționa la fel ca și fără acest cod. dacă obiectivul este să sortați postările împreună pe toate paginile, va trebui să modificați interogarea direct cu un filtru.

Milo Milo
23 mar. 2015 17:36:40

Asta se potrivește mai bine cu ceea ce încerc să fac. Practic, am nevoie de o metodă simplă pentru ca oamenii să poată sorta rezultatele căutării după tipul de postare. În mod optim, nici nu m-aș deranja cu paginarea și aș afișa toate rezultatele potrivite în fiecare container, dar nu sunt sigur ce impact ar putea avea asupra performanței site-ului.

tdc tdc
23 mar. 2015 17:41:19

atunci va fi necesar un filtru posts_orderby și niște SQL personalizat. din păcate, nu aș putea scrie asta pe loc.

Milo Milo
23 mar. 2015 18:02:43

aici este realizat folosind SQL.

honk31 honk31
26 aug. 2016 12:42:45

Exact ce căutam, mulțumesc. Cum pot adăuga orderby la asta?

Mike Mike
22 mai 2017 14:40:10
Arată celelalte 3 comentarii