apply_filters( "rest_{$this->post_type}_query", array $args, WP_REST_Request $request )

Filters WP_Query arguments when querying posts via the REST API.


The dynamic portion of the hook name, $this->post_type, refers to the post type slug.

Possible hook names include:

  • rest_post_query
  • rest_page_query
  • rest_attachment_query

Enables adding extra arguments or setting defaults for a post collection request.

Top ↑


$args array
Array of arguments for WP_Query.
$request WP_REST_Request
The REST API request.

Top ↑


File: wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php. View all references

$args       = apply_filters( "rest_{$this->post_type}_query", $args, $request );

Top ↑


Version Description
5.7.0 Moved after the tax_query query arg is generated.
4.7.0 Introduced.

Top ↑

User Contributed Notes

  1. Skip to note 1 content
    Contributed by Haris

    Code example:

    function query_book_by_year($args, $request) {
    	if(isset($request["year"]) && intval($request["year"]) > 1500) {
    		$args['meta_key'] = 'year';
    		$args['meta_value'] = intval($request["year"]);
    	return $args;
    add_filter('rest_book_query', 'query_book_by_year', 10, 2);
  2. Skip to note 2 content
    Contributed by Yan Sern

    I wanted to see the SQL generated from the filters I’ve added. However, using &debug=sql on the http request parameter didn’t work for me.

    You can set a breakpoint at line 299 (at least at the time of writing) under class-wp-rest-posts-controller.php@get_items() method, which looks like this:

    $posts_query  = new WP_Query(); // line 298
    $query_result = $posts_query->query( $query_args ); // line 299

    Or if you don’t have a debugger setup yet, you can do:

    $posts_query  = new WP_Query();
    $query_result = $posts_query->query( $query_args );
    echo $posts_query->request;

You must log in before being able to contribute a note or feedback.