Gruparea rezultatelor căutării după tipul postării?
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( __( '← Postări mai vechi', 'FoundationPress' ) ); ?></div>
<div class="post-next"><?php previous_posts_link( __( 'Postări mai noi →', 'FoundationPress' ) ); ?></div>
</nav>
<?php } ?>
<?php do_action('foundationPress_after_content'); ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
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;
}
}

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

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

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

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.

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.

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

aici este realizat folosind SQL.
