Traversing Search Results
-
Upload
tammy-hart -
Category
Internet
-
view
300 -
download
2
Transcript of Traversing Search Results
![Page 1: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/1.jpg)
TraversingSearch Resultswith Sessions + Transients
![Page 2: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/2.jpg)
Tammy HartWeb Designer + Developerat UpTrending
@tammyhart
![Page 3: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/3.jpg)
Objective:
1. Temporarily store search results
2. Navigate search results with next and previous post links
![Page 4: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/4.jpg)
You will need:
• WordPress site with several posts
• WP Session Manager Plugin by Eric Mann
![Page 5: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/5.jpg)
1 2 3
654
987
121110
? =
![Page 6: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/6.jpg)
loopconf_search_array( $search_hash )=
array( 2, 4, 8, 9, 11 )
![Page 7: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/7.jpg)
/** * Return search array */function loopconf_search_array( $search_hash ) { // check for existence of unique transient if ( false === ( $search_array = get_transient( 'loopconf_search_' . $search_hash ) ) ) { global $wpdb; $posts = $wpdb->get_results( $GLOBALS['wp_query']->request );
$search_array = array();
if ( false === empty( $posts ) ) { foreach ( $posts as $post ) { $search_array[] = $post->ID; } } // save the transient for 10 minutes set_transient( 'loopconf_search_' . $search_hash, $search_array, MINUTE_IN_SECONDS * 10 ); } return $search_array;}
![Page 8: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/8.jpg)
?
unique string
posts array
session
![Page 9: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/9.jpg)
$wp_session['search_string'] = 'cats'
$wp_session['search_hash'] = 'lkmvdsoi939ks0fdm...'
$wp_session['search_array'] = array( 2, 4, 8, 9, 11 )
![Page 10: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/10.jpg)
/** * Set session search_string */function loopconf_set_search_string() { global $wp_query; $wp_session = WP_Session::get_instance(); // if we’re on a search page, save the search data if ( !is_admin() && is_search() && isset( $wp_query->query_vars_hash ) ) { $search_string = $wp_query->query['s']; $search_hash = $wp_query->query_vars_hash; $wp_session['search_string'] = $search_string; $wp_session['search_hash'] = $search_hash; $wp_session['search_array'] = loopconf_search_array( $search_hash ); } // if we’re anywhere else, clear the search data if ( !is_admin() && !is_search() && !is_single() && is_main_query() ) { $wp_session['search_string'] = $wp_session['search_hash'] = $wp_session['search_array'] = null; }}add_action( 'pre_get_posts', 'loopconf_set_search_string' );
![Page 11: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/11.jpg)
Post 4 Post 9
Post 8WordPress ipsum dolor sit amet install brecker basie multisite coltrane wordcamp ella westi. foundation mike parker
multisite nacin wp-cli monk gershwin customizer plugin. gpl mark vaultpress boren database �lter westi upgrade mike
chat strayhorn api. theme dexter baker api wp-cli action automattic jaquith parker premium oscar brecker tyner.
Donncha green plugin gershwin customizer tyner multisite buddypress helen duke database bbpress carmen blog. Mike
green carmen westi jaquith, akismet matt buddypress tyner plugin getz stitt duke. Nacin smith api tyner ozz language.
Monk boren cache, post api green reinhardt transient. Smith boren b2, api cache getz mullenweg WordPress. Davis tyner
carmen buddypress, mike chat smith api theme meetup mingus install stitt. Boren jones basie, chat otto bbpress �lter
stitt.
Dexter wordcamp jazz plugin davis oscar. Akismet mike jen customizer website green. Donncha jen haiku blog website,
oscar andrew. Westi premium boren oscar, baker mike basie wordcamp upgrade language jen gpl ella dexter.
![Page 12: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/12.jpg)
if ( $go_forward ) { return 9 }
else { return 4 }
![Page 13: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/13.jpg)
/** * Get the next or previous post in the array */function loopconf_get_next_search_result( $next = true ) { $wp_session = WP_Session::get_instance(); // make sure there’s a search saved in the session if ( isset( $wp_session['search_array'] ) === false ) { return false; } // set variables $next_key = 0;
$search_array = $wp_session['search_array']->toArray(); $current_key = array_search( get_the_ID(), $search_array );
...
![Page 14: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/14.jpg)
...
// get next or previous location in the array if ( $next === true ) {
$next_key = $current_key + 1; if ( isset( $search_array[$next_key] ) === false ) { $next_key = 0; }
} else {
$next_key = $current_key - 1; if ( isset( $search_array[$next_key] ) === false ) { end( $search_array ); $next_key = key( $search_array ); }
} // return value from that location return $search_array[$next_key];}
![Page 15: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/15.jpg)
<?php$prev_url = $next_url = false;
// get next and prev search results or just the linksif ( loopconf_get_next_search_result() ) { $wp_session = WP_Session::get_instance(); $prev_url = get_permalink( loopconf_get_next_search_result( false ) ); $next_url = get_permalink( loopconf_get_next_search_result() );
} else {
$prev_url = get_previous_post(); $next_url = get_next_post();
}?>
<div class="single-nav">
<a href="<?php echo esc_url( $prev_url ); ?>" class="prev">Previous</a>
<a href="<?php echo esc_url( $next_url ); ?>" class="next">Next</a>
</div>
![Page 16: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/16.jpg)
Live example: weststudio.com
![Page 17: Traversing Search Results](https://reader031.fdocuments.net/reader031/viewer/2022020106/55a9e2a01a28ab63318b4816/html5/thumbnails/17.jpg)
�anks!
bit.ly/traverse_loopconf
@uptrending / @tammyhart