Last active
March 8, 2022 13:56
-
-
Save joshuadavidnelson/127e51326c04367036da to your computer and use it in GitHub Desktop.
Remove a post type from search results, but keep all others
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 | |
/** | |
* Modify query to remove a post type from search results, but keep all others | |
* | |
* @author Joshua David Nelson, [email protected] | |
* @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2+ | |
*/ | |
add_action( 'pre_get_posts', 'jdn_modify_query' ); | |
function jdn_modify_query( $query ) { | |
// First, make sure this isn't the admin and is the main query, otherwise bail | |
if( is_admin() || ! $query->is_main_query() ) | |
return; | |
// If this is a search result query | |
if( $query->is_search() ) { | |
// Gather all searchable post types | |
$in_search_post_types = get_post_types( array( 'exclude_from_search' => false ) ); | |
// The post type you're removing, in this example 'page' | |
$post_type_to_remove = 'page'; | |
// Make sure you got the proper results, and that your post type is in the results | |
if( is_array( $in_search_post_types ) && in_array( $post_type_to_remove, $in_search_post_types ) ) { | |
// Remove the post type from the array | |
unset( $in_search_post_types[ $post_type_to_remove ] ); | |
// set the query to the remaining searchable post types | |
$query->set( 'post_type', $in_search_post_types ); | |
} | |
} | |
} |
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 | |
/** | |
* Modify query to remove a post type from search results, but keep all others | |
* | |
* @author Joshua David Nelson, [email protected] | |
* @license http://www.gnu.org/licenses/gpl-2.0.html GPLv2+ | |
*/ | |
add_action( 'pre_get_posts', 'jdn_modify_query' ); | |
function jdn_modify_query( $query ) { | |
// First, make sure this isn't the admin and is the main query, otherwise bail | |
if( is_admin() || ! $query->is_main_query() ) | |
return; | |
// If this is a search result query | |
if( $query->is_search() ) { | |
// Gather all searchable post types | |
$in_search_post_types = get_post_types( array( 'exclude_from_search' => false ) ); | |
// Make sure you got the proper results, otherwise bail. | |
if ( ! is_array( $in_search_post_types ) ) { | |
return; | |
} | |
// The post types you're removing, in this example 'page' and 'post' | |
$post_types_to_remove = array( 'post', 'page' ); | |
// loop through each one and remove it from the searchable post types, if it's in there. | |
foreach ( $post_types_to_remove as $post_type ) { | |
// Confirm if the post type is in the results | |
if( in_array( $post_type, $in_search_post_types ) ) { | |
// Remove the post type from the array | |
unset( $in_search_post_types[ $post_type ] ); | |
} | |
} | |
// set the query to the remaining searchable post types | |
$query->set( 'post_type', $in_search_post_types ); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment