Exclude Posts from Search
November 12, 2024 ยท AI Conversations
### Method 1: Adding Code to Your Theme's `functions.php` File
Add the following code to your theme's `functions.php` file or a custom plugin:
function exclude_posts_from_search($query) {
// Check if it's the main search query and not in the admin area
if ($query->is_search() && $query->is_main_query() && !is_admin()) {
// Specify the post IDs you want to exclude
$exclude_ids = [123, 456, 789]; // Replace with your post IDs
$query->set('post__not_in', $exclude_ids);
}
}
add_action('pre_get_posts', 'exclude_posts_from_search');
### Explanation
– `is_search()`: Checks if the current query is a search.
– `is_main_query()`: Ensures that we only modify the main search query and not any other custom queries.
– `is_admin()`: Ensures this code doesn't run in the WordPress admin area.
– `post__not_in`: This parameter excludes posts with specific IDs from the query.
### Method 2: Using a Filter (More Flexible)
If you want to be more flexible and handle different conditions, you can use the `posts_where` filter:
function custom_exclude_posts_from_search($where, $query) {
if ($query->is_search() && !is_admin()) {
global $wpdb;
$exclude_ids = [123, 456, 789]; // Replace with your post IDs
$exclude_ids_str = implode(',', $exclude_ids);
$where .= " AND {$wpdb->posts}.ID NOT IN ($exclude_ids_str)";
}
return $where;
}
add_filter('posts_where', 'custom_exclude_posts_from_search', 10, 2);
### Which Method Should You Use?
– **Method 1** is more straightforward and easier to understand.
– **Method 2** provides more control and flexibility, especially if you're modifying more complex queries.
Choose the method that best suits your needs!