Forked from robneu/genesis-searchwp-image-search.php
Created
September 14, 2019 21:25
-
-
Save jamiemitchell/72de32d985a664b12d341c050e178cc5 to your computer and use it in GitHub Desktop.
Create a custom search template to display custom search results using SearchWP and the Genesis Framework.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* This file adds the SearchWP Images template to your theme. | |
* | |
* Template Name: SearchWP Images | |
* | |
* @author Robert Neu | |
* @package Genesis | |
* @subpackage SearchWP | |
*/ | |
/** | |
* This is a helper function to instantiate SearchWP. | |
* | |
* @return SearchwP object | |
* @since 1.0.0 | |
*/ | |
function prefix_searchwp_init() { | |
return SearchWP::instance(); | |
} | |
/** | |
* This is a custom SearchWP form which submits using the "get" method. | |
* | |
* @param $query the user's search query | |
* @since 1.0.0 | |
*/ | |
function prefix_searchwp_form( $query ) { | |
if ( empty( $query ) ) { | |
$query = __( 'Search Images...', 'textdomain' ); | |
} | |
echo'<form class="searchwp-form" action="" method="get">'; | |
echo'<input type="text" id="swp-query" name="swp-query" value="' . esc_attr( $query ) . '" />'; | |
echo'<input type="hidden" name="" id="" value="" />'; | |
echo'<button type="submit">' . __( 'Search', 'textdomain' ) . '</button>'; | |
echo'</form>'; | |
} | |
/** | |
* Pagination for a Search WP search loop. | |
* | |
* This outputs basic wrapping HTML and displays pagination links for the user | |
* to navigate between pages of search results. | |
* | |
* @global $post | |
* @uses prefix_searchwp_init to instantiate the SearchWP class. | |
* @param $query the user's search query | |
* @param $page the current page number | |
* @since 1.1.0 | |
*/ | |
function prefix_searchwp_pagination( $query, $page ) { | |
if ( ! prefix_searchwp_init()->maxNumPages > 1 ) { | |
return; | |
} | |
// set up pagination | |
$prev = $page > 1 ? $page - 1 : false; | |
$next = $page < prefix_searchwp_init()->maxNumPages ? $page + 1 : false; | |
// Set the nav link for reuse. | |
$nav_link = get_permalink() . '?swp-query=' . urlencode( $query ) . '&swp-page='; | |
?> | |
<!-- begin pagination --> | |
<div class="searchwp-pagination pagination"> | |
<ul> | |
<?php if( $prev ) : ?> | |
<li class="next-prev nav-previous"> | |
<a href="<?php echo $nav_link . $prev; ?>"><?php _e( '← Previous Page', 'textdomain' ); ?></a> | |
</li> | |
<?php endif; ?> | |
<?php if( $next ) : ?> | |
<li class="next-prev nav-next"> | |
<a href="<?php echo $nav_link . $next; ?>"><?php _e( 'Next Page →', 'textdomain' ); ?></a> | |
</li> | |
<?php endif; ?> | |
</ul> | |
</div> | |
<!-- end pagination --> | |
<?php | |
} | |
add_action( 'genesis_after_entry', 'prefix_do_search_loop' ); | |
/** | |
* This is a custom loop which contains search results. | |
* | |
* It outputs basic wrapping HTML and displays images | |
* based on user's search queries. | |
* | |
* @global $post | |
* @uses prefix_searchwp_init to instantiate the SearchWP class. | |
* @since 1.0.0 | |
*/ | |
function prefix_do_search_loop() { | |
// Return early if SearchWP is disabled. | |
if ( ! class_exists( 'SearchWP' ) ) { | |
return; | |
} | |
global $post; | |
$counter = 0; | |
$query = isset( $_REQUEST['swp-query'] ) ? sanitize_text_field( $_REQUEST['swp-query'] ) : ''; | |
$page = isset( $_REQUEST['swp-page'] ) ? absint( $_REQUEST['swp-page'] ) : 1; | |
// Load the custom SearchWP form. | |
prefix_searchwp_form( $query ); | |
// Do nothing if no search has been performed. | |
if ( empty( $query ) ) { | |
return; | |
} | |
// perform the search | |
$posts = prefix_searchwp_init()->search( 'image_search', $query, $page ); | |
// Display a message if there are no results. | |
if ( empty( $posts ) ) { | |
echo'<h2 class="entry-title search-title">' . __( 'Sorry, No Images Found. Try Another Search.', 'textdomain' ) . '</h2>'; | |
return; | |
} | |
echo'<div class="searchwp-results">'; | |
// Display the search results. | |
foreach ( $posts as $post ) { | |
// Make sure post template tags work correctly. | |
setup_postdata( $post ); | |
$counter++; | |
$column_class = 'one-third'; | |
// Add Last class to every 3rd post. | |
if ( $counter % 3 == 1 ) { | |
$column_class .= ' first'; | |
} | |
echo '<article class="' . implode( ' ', get_post_class( $column_class ) ) . '">'; | |
echo '<a class="search-image" href="'.wp_get_attachment_url( $post->ID ).' ">'; | |
echo wp_get_attachment_image( $post->ID, 'in-post', false, array( 'title' => get_the_title() ) ); | |
echo '</a><!-- .search-image -->'; | |
echo '</article>'; | |
} | |
wp_reset_postdata(); | |
echo'</div>'; | |
// Display pagination. | |
prefix_searchwp_pagination( $query, $page ); | |
} | |
genesis(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment