Make WordPress Core

Ticket #38629: 38629.1.diff

File 38629.1.diff, 5.3 KB (added by danielbachhuber, 7 years ago)
  • src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

    diff --git a/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php b/src/wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php
    index 0122f9a..966fec8 100644
    a b class WP_REST_Posts_Controller extends WP_REST_Controller { 
    148148
    149149                // Retrieve the list of registered collection query parameters.
    150150                $registered = $this->get_collection_params();
    151                 $args = array();
    152 
    153                 /*
    154                  * This array defines mappings between public API query parameters whose
    155                  * values are accepted as-passed, and their internal WP_Query parameter
    156                  * name equivalents (some are the same). Only values which are also
    157                  * present in $registered will be set.
    158                  */
    159                 $parameter_mappings = array(
    160                         'author'         => 'author__in',
    161                         'author_exclude' => 'author__not_in',
    162                         'exclude'        => 'post__not_in',
    163                         'include'        => 'post__in',
    164                         'menu_order'     => 'menu_order',
    165                         'offset'         => 'offset',
    166                         'order'          => 'order',
    167                         'orderby'        => 'orderby',
    168                         'page'           => 'paged',
    169                         'parent'         => 'post_parent__in',
    170                         'parent_exclude' => 'post_parent__not_in',
    171                         'search'         => 's',
    172                         'slug'           => 'post_name__in',
    173                         'status'         => 'post_status',
    174                 );
    175151
    176152                /*
    177153                 * For each known parameter which is both registered and present in the request,
    178154                 * set the parameter's value on the query $args.
    179155                 */
    180                 foreach ( $parameter_mappings as $api_param => $wp_param ) {
    181                         if ( isset( $registered[ $api_param ], $request[ $api_param ] ) ) {
     156                $args = array();
     157                foreach( $registered as $api_param => $meta ) {
     158                        if ( isset( $request[ $api_param ] ) ) {
     159                                $wp_param = isset( $meta['query_var'] ) ? $meta['query_var'] : $api_param;
    182160                                $args[ $wp_param ] = $request[ $api_param ];
    183161                        }
    184162                }
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    20222000                                'type'                => 'array',
    20232001                                'default'             => array(),
    20242002                                'sanitize_callback'   => 'wp_parse_id_list',
     2003                                'query_var'            => 'author__in',
    20252004                        );
    20262005                        $params['author_exclude'] = array(
    20272006                                'description'         => __( 'Ensure result set excludes posts assigned to specific authors.' ),
    20282007                                'type'                => 'array',
    20292008                                'default'             => array(),
    20302009                                'sanitize_callback'   => 'wp_parse_id_list',
     2010                                'query_var'            => 'author__not_in',
    20312011                        );
    20322012                }
    20332013
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    20432023                        'type'               => 'array',
    20442024                        'default'            => array(),
    20452025                        'sanitize_callback'  => 'wp_parse_id_list',
     2026                        'query_var'           => 'post__not_in',
    20462027                );
    20472028
    20482029                $params['include'] = array(
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    20502031                        'type'               => 'array',
    20512032                        'default'            => array(),
    20522033                        'sanitize_callback'  => 'wp_parse_id_list',
     2034                        'query_var'           => 'post__in',
    20532035                );
    20542036
    20552037                if ( 'page' === $this->post_type || post_type_supports( $this->post_type, 'page-attributes' ) ) {
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    20952077                        $params['orderby']['enum'][] = 'menu_order';
    20962078                }
    20972079
     2080                // Defined by the parent class.
     2081                $params['page']['query_var'] = 'paged';
     2082
    20982083                $post_type_obj = get_post_type_object( $this->post_type );
    20992084
    21002085                if ( $post_type_obj->hierarchical || 'attachment' === $this->post_type ) {
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    21032088                                'type'              => 'array',
    21042089                                'sanitize_callback' => 'wp_parse_id_list',
    21052090                                'default'           => array(),
     2091                                'query_var'          => 'post_parent__in',
    21062092                        );
    21072093                        $params['parent_exclude'] = array(
    21082094                                'description'       => __( 'Limit result set to all items except those of a particular parent id.' ),
    21092095                                'type'              => 'array',
    21102096                                'sanitize_callback' => 'wp_parse_id_list',
    21112097                                'default'           => array(),
     2098                                'query_var'          => 'post_parent__not_in',
    21122099                        );
    21132100                }
    21142101
     2102                // Defined by the parent class.
     2103                $params['search']['query_var'] = 's';
     2104
    21152105                $params['slug'] = array(
    21162106                        'description'       => __( 'Limit result set to posts with one or more specific slugs.' ),
    21172107                        'type'              => 'array',
    21182108                        'sanitize_callback' => 'wp_parse_slug_list',
     2109                        'query_var'          => 'post_name__in',
    21192110                );
    21202111
    21212112                $params['status'] = array(
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    21252116                        'sanitize_callback' => 'sanitize_key',
    21262117                        'type'              => 'string',
    21272118                        'validate_callback' => array( $this, 'validate_user_can_query_private_statuses' ),
     2119                        'query_var'          => 'post_status',
    21282120                );
    21292121
    21302122                $taxonomies = wp_list_filter( get_object_taxonomies( $this->post_type, 'objects' ), array( 'show_in_rest' => true ) );
    class WP_REST_Posts_Controller extends WP_REST_Controller { 
    21482140                        );
    21492141                }
    21502142
     2143                /**
     2144                 * Filters the collection parameters for the controller.
     2145                 *
     2146                 * Enables adding or removing collection parameters from the endpoint.
     2147                 *
     2148                 * @since 4.7.0
     2149                 *
     2150                 * @param array $params Key value array of the collection params.
     2151                 */
     2152                $params = apply_filters( "rest_{$this->post_type}_collection_params", $params );
    21512153                return $params;
    21522154        }
    21532155