Home » Hooks » posts_where

The "posts_where" hook in WordPress is a powerful tool that allows developers to modify the SQL "WHERE" clause of a database query used to retrieve posts. This hook is triggered just before the database query is executed, giving developers the ability to customize the conditions for retrieving posts based on specific criteria.

The "posts_where" hook is primarily used to add custom conditions or filters to the default post retrieval process. For example, let’s say you have a custom post type called "books" and you only want to retrieve books that have a certain genre. You can utilize the "posts_where" hook to modify the query and add a condition that restricts the query to retrieve only books of a specific genre.

Here’s an example usage code of the "posts_where" hook:

function filter_books_by_genre($where, $query) {
    // Check if the query is for the "books" post type
    if (isset($query->query_vars['post_type']) && $query->query_vars['post_type'] === 'books') {
        // Add a condition to retrieve only books of the "fantasy" genre
        $where .= " AND (genre.meta_key = 'genre' AND genre.meta_value = 'fantasy')";

    return $where;
add_filter('posts_where', 'filter_books_by_genre', 10, 2);

In the example above, we define a custom function called "filter_books_by_genre" which takes two parameters: $where and $query. Inside the function, we check if the query is for the "books" post type. If it is, we modify the SQL "WHERE" clause by appending an additional condition. This condition restricts the query to retrieve only posts where the "genre" meta key has a value of "fantasy". Finally, we use the add_filter function to attach our custom function to the "posts_where" hook.

By utilizing the "posts_where" hook, developers have the flexibility to customize the post retrieval process and narrow down the results based on their specific requirements. Whether it’s filtering posts based on custom fields, taxonomies, or any other criteria, the "posts_where" hook provides a powerful way to fine-tune the post queries in WordPress.

Learn More on

WordPress snippets using the posts_where hook

Register an account to save your snippets or go Pro to get more features.