Last active
April 4, 2023 12:27
-
-
Save jchristopher/2682fe9c5e5ca9cf6bfaeb3358751214 to your computer and use it in GitHub Desktop.
Use Elementor to power SearchWP Supplemental Engine
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 | |
// @link https://searchwp.com/v3/docs/kb/using-elementor-for-supplemental-engines/ | |
// We need to flag the search form. | |
add_action( 'elementor_pro/search_form/after_input', function( $form ) { | |
// Check to see if this is the right Search Form. | |
$settings = $form->get_data( 'settings' ); | |
if ( isset( $settings['_element_id'] ) && 'searchwp-supplemental-form' == $settings['_element_id'] ) { | |
?> | |
<input type="hidden" name="searchwp" value="supplemental" /> | |
<?php | |
} | |
} ); | |
// Redirect when applicable. | |
add_action( 'template_redirect', function() { | |
if ( is_search() && ! empty( $_GET['searchwp'] ) && 'supplemental' === $_GET['searchwp'] ) { | |
wp_safe_redirect( add_query_arg( array( | |
'swpquery' => get_search_query(), | |
), get_permalink( 18 ) ) ); | |
exit(); | |
} | |
} ); | |
// Provide Search results. | |
add_filter( 'elementor/query/query_args', function( $query_vars, $widget ) { | |
// Check to see if this is the right Widget. | |
$settings = $widget->get_data( 'settings' ); | |
if ( is_admin() | |
|| ! isset( $settings['posts_query_id'] ) | |
|| ( ! empty( $settings['posts_query_id'] ) && 'searchwp-supplemental' !== $settings['posts_query_id'] ) ) { | |
return $query_vars; | |
} | |
// This form field was set up in Elementor. | |
$query = isset( $_GET['swpquery'] ) ? sanitize_text_field( $_GET['swpquery'] ) : ''; | |
if ( ! empty( $query ) ) { | |
// Perform the search. | |
$searchwp = new SWP_Query( array( | |
's' => $query, | |
'engine' => 'supplemental', // Engine to search. | |
'fields' => 'ids', | |
'posts_per_page' => -1, | |
) ); | |
if ( empty( $searchwp->posts ) ) { | |
$searchwp->posts = array( 0 ); | |
} | |
// Override the query vars with SearchWP results. | |
$query_vars['post__in'] = $searchwp->posts; | |
$query_vars['post_type'] = 'any'; // Restricted by post__in. | |
$query_vars['post_status'] = 'any'; // Restricted by post__in. | |
$query_vars['orderby'] = 'post__in'; // Order by post__in. | |
$query_vars['order'] = 'DESC'; // Order descending. | |
} else { | |
// Force no results. | |
$query_vars['post__in'] = array( 0 ); | |
} | |
return $query_vars; | |
}, 10, 2 ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment