My site has 3 unique post types:
- Default Blog posts (“post”)
- custom type “lesson”
- custom type “series”
When the user searches the site, I would like pertinent results from all 3 post types to show up on the search results page. The “posts” results are in one container, “lesson” results in a separate container, etc. How can I modify the search page to accomplish this?
Here is my current loop:
<?php get_header(); ?>
<div class="row">
<div class="small-12 large-8 columns" role="main">
<?php do_action('foundationPress_before_content'); ?>
<h2><?php _e('Search Results for', '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( __( '← Older posts', 'FoundationPress' ) ); ?></div>
<div class="post-next"><?php previous_posts_link( __( 'Newer posts →', 'FoundationPress' ) ); ?></div>
</nav>
<?php } ?>
<?php do_action('foundationPress_after_content'); ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
You can run the same loop multiple times by using rewind_posts() to output each type separately.
if( have_posts() ){
$types = array('post', 'lesson', 'series');
foreach( $types as $type ){
echo 'your container opens here for ' . $type;
while( have_posts() ){
the_post();
if( $type == get_post_type() ){
get_template_part('content', $type);
}
}
rewind_posts();
echo 'your container closes here for ' . $type;
}
}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0