Inside your theme's search.php page, add the following code ("template name" indicates the name to be used when choosing a template, see STEP 2):
<?php /* Template Name: Search Page */ ?> <?php get_header(); ?> <?php global $query_string; $query_args = explode("&", $query_string); $search_query = array(); if( strlen($query_string) > 0 ) { foreach($query_args as $key => $string) { $query_split = explode("=", $string); $search_query[$query_split[0]] = urldecode($query_split[1]); } // foreach } //if //here, you can add to the current query params $search_query['posts_per_page'] = 1; $search_query['post_type'] = 'post'; $search_query['taxonomy'] = 'blog'; $search = new WP_Query($search_query); ?> <?php get_search_form(); ?> <?php if ($search->have_posts()) : ?> <h2>Search Result For: <?php the_search_query(); ?></h2> <div class="light-separator small center"></div> <?php while ($search->have_posts()) : $search->the_post();?> <h2><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h2> <?php endwhile; else : echo ' <div class="no-content"> <h3>Ooopss, looks like nothing matches your result.</h3> </div>'; endif; ?> <?php get_footer(); // Omit closing PHP tag to avoid "Headers already sent" issues.
STEP 2: Associate the theme with a search page
In WP backend, create a Page named "Search"
In the edit screen, choose the template named "Search Page"
Hit "Save/Publish"
STEP 3: Prepare search.php for Live Search
Please note: we added the "datafetch" wrapper and replaced the with <input type="text" name="keyword" id="keyword" onkeyup="fetch()"></input>
<?php /* Template Name: Search Page */ ?> <?php get_header(); ?> <?php global $query_string; $query_args = explode("&", $query_string); $search_query = array(); if( strlen($query_string) > 0 ) { foreach($query_args as $key => $string) { $query_split = explode("=", $string); $search_query[$query_split[0]] = urldecode($query_split[1]); } // foreach } //if //here, you can add to the current query params $search_query['posts_per_page'] = 1; $search_query['post_type'] = 'post'; $search_query['taxonomy'] = 'blog'; $search = new WP_Query($search_query); ?> <input type="text" name="keyword" id="keyword" onkeyup="fetch()"></input> <div id="datafetch"> <?php if ($search->have_posts()) : ?> <h2>Search Result For: <?php the_search_query(); ?></h2> <div class="light-separator small center"></div> <?php while ($search->have_posts()) : $search->the_post();?> <h2><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h2> <?php endwhile; else : echo ' <div class="no-content"> <h3>Ooopss, looks like nothing matches your result.</h3> </div>'; endif; ?> </div> <?php get_footer(); // Omit closing PHP tag to avoid "Headers already sent" issues.STEP 4: Add the Ajax functions into your theme's functions.php
// add the ajax fetch js add_action( 'wp_footer', 'ajax_fetch' ); function ajax_fetch() { ?> <script type="text/javascript"> function fetch(){ jQuery.ajax({ url: '<?php echo admin_url('admin-ajax.php'); ?>', type: 'post', data: { action: 'data_fetch', keyword: jQuery('#keyword').val() }, success: function(data) { jQuery('#datafetch').html( data ); } }); } </script> <?php } // the ajax function add_action('wp_ajax_data_fetch' , 'data_fetch'); add_action('wp_ajax_nopriv_data_fetch','data_fetch'); function data_fetch(){ $the_query = new WP_Query( array( 'posts_per_page' => -1, 's' => esc_attr( $_POST['keyword'] ), 'post_type' => 'post' ) ); if( $the_query->have_posts() ) : while( $the_query->have_posts() ): $the_query->the_post(); ?> <h2><a href="<?php echo esc_url( post_permalink() ); ?>"><?php the_title();?></a></h2> <?php endwhile; wp_reset_postdata(); endif; die(); }That's it!
No comments:
Post a Comment