posts_results is a WordPress PHP filter that allows you to modify the raw array of post objects before status checks are performed.
Usage
add_filter( 'posts_results', 'my_posts_results_filter', 10, 2 );
function my_posts_results_filter( $posts, $query ) {
// Modify the $posts array here
return $posts;
}
In this example, we’re adding a filter to the ‘posts_results’ hook and specifying a function called ‘my_posts_results_filter’ that will be called when the hook is triggered. The function takes two parameters: the $posts array, which contains the results of the query, and the $query object, which contains information about the query.
Parameters
$posts(WP_Post[]): Array of post objects.$query(WP_Query): The WP_Query instance (passed by reference).
Examples
Change Post Titles
function modify_post_titles($posts, $query) {
foreach ($posts as $post) {
$post->post_title .= ' - Modified';
}
return $posts;
}
add_filter('posts_results', 'modify_post_titles', 10, 2);
This example appends ” – Modified” to each post’s title in the $posts array.
Set All Posts to Draft Status
function set_posts_to_draft($posts, $query) {
foreach ($posts as $post) {
$post->post_status = 'draft';
}
return $posts;
}
add_filter('posts_results', 'set_posts_to_draft', 10, 2);
This example sets the status of all posts in the $posts array to ‘draft’.
Exclude Posts with Specific IDs
function exclude_specific_posts($posts, $query) {
$excluded_ids = array(12, 34, 56);
$filtered_posts = array();
foreach ($posts as $post) {
if (!in_array($post->ID, $excluded_ids)) {
$filtered_posts[] = $post;
}
}
return $filtered_posts;
}
add_filter('posts_results', 'exclude_specific_posts', 10, 2);
This example removes any posts with the IDs 12, 34, and 56 from the $posts array.
Add Custom Property to Post Objects
function add_custom_property($posts, $query) {
foreach ($posts as $post) {
$post->custom_property = 'Custom Value';
}
return $posts;
}
add_filter('posts_results', 'add_custom_property', 10, 2);
This example adds a custom property called ‘custom_property’ with the value ‘Custom Value’ to each post object in the $posts array.
Limit Post Results
function limit_post_results($posts, $query) {
return array_slice($posts, 0, 3);
}
add_filter('posts_results', 'limit_post_results', 10, 2);
This example limits the number of posts in the $posts array to 3 by using array_slice().