The posts_where_paged filter allows you to modify the WHERE clause of a WordPress query, specifically when dealing with paging queries.
Usage
add_filter('posts_where_paged', 'your_custom_function', 10, 2);
function your_custom_function($where, $query) {
// your custom code here
return $where;
}
Parameters
- $where (string) – The WHERE clause of the query.
- $query (WP_Query) – The WP_Query instance (passed by reference).
More information
See WordPress Developer Resources: posts_where_paged
Examples
Exclude specific post IDs from the query
This example excludes posts with the IDs 5, 12, and 18 from the query.
add_filter('posts_where_paged', 'exclude_specific_post_ids', 10, 2);
function exclude_specific_post_ids($where, $query) {
global $wpdb;
$exclude_ids = array(5, 12, 18);
$where .= " AND {$wpdb->posts}.ID NOT IN (" . implode(',', $exclude_ids) . ")";
return $where;
}
Show only posts containing a specific keyword
This example filters the query to show only posts containing the word “example”.
add_filter('posts_where_paged', 'filter_posts_by_keyword', 10, 2);
function filter_posts_by_keyword($where, $query) {
global $wpdb;
$keyword = "example";
$where .= " AND {$wpdb->posts}.post_content LIKE '%{$keyword}%'";
return $where;
}
Exclude posts older than 30 days
This example filters the query to show only posts that are less than 30 days old.
add_filter('posts_where_paged', 'exclude_posts_older_than_30_days', 10, 2);
function exclude_posts_older_than_30_days($where, $query) {
global $wpdb;
$where .= " AND {$wpdb->posts}.post_date > DATE_SUB(NOW(), INTERVAL 30 DAY)";
return $where;
}
Show only posts from a specific author
This example filters the query to show only posts by the author with the ID 3.
add_filter('posts_where_paged', 'filter_posts_by_author', 10, 2);
function filter_posts_by_author($where, $query) {
global $wpdb;
$author_id = 3;
$where .= " AND {$wpdb->posts}.post_author = {$author_id}";
return $where;
}
Show only posts with a specific post format
This example filters the query to show only posts with the “gallery” post format.
add_filter('posts_where_paged', 'filter_posts_by_post_format', 10, 2);
function filter_posts_by_post_format($where, $query) {
global $wpdb;
$post_format = "gallery";
$where .= " AND {$wpdb->posts}.ID IN (SELECT object_id FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = (SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy = 'post_format' AND term_id = (SELECT term_id FROM {$wpdb->terms} WHERE slug = 'post-format-{$post_format}')))";
return $where;
}