Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save joshuadavidnelson/127e51326c04367036da to your computer and use it in GitHub Desktop.
Save joshuadavidnelson/127e51326c04367036da to your computer and use it in GitHub Desktop.
Remove a post type from search results, but keep all others
<?php
/**
* Modify query to remove a post type from search results, but keep all others
*
* @author Joshua David Nelson, josh@joshuadnelson.com
* @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 );
}
}
}
<?php
/**
* Modify query to remove a post type from search results, but keep all others
*
* @author Joshua David Nelson, josh@joshuadnelson.com
* @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