Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../public_h.../wp-inclu.../rest-api
File: class-wp-rest-server.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* REST API: WP_REST_Server class
[2] Fix | Delete
*
[3] Fix | Delete
* @package WordPress
[4] Fix | Delete
* @subpackage REST_API
[5] Fix | Delete
* @since 4.4.0
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
/**
[9] Fix | Delete
* Core class used to implement the WordPress REST API server.
[10] Fix | Delete
*
[11] Fix | Delete
* @since 4.4.0
[12] Fix | Delete
*/
[13] Fix | Delete
#[AllowDynamicProperties]
[14] Fix | Delete
class WP_REST_Server {
[15] Fix | Delete
[16] Fix | Delete
/**
[17] Fix | Delete
* Alias for GET transport method.
[18] Fix | Delete
*
[19] Fix | Delete
* @since 4.4.0
[20] Fix | Delete
* @var string
[21] Fix | Delete
*/
[22] Fix | Delete
const READABLE = 'GET';
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* Alias for POST transport method.
[26] Fix | Delete
*
[27] Fix | Delete
* @since 4.4.0
[28] Fix | Delete
* @var string
[29] Fix | Delete
*/
[30] Fix | Delete
const CREATABLE = 'POST';
[31] Fix | Delete
[32] Fix | Delete
/**
[33] Fix | Delete
* Alias for POST, PUT, PATCH transport methods together.
[34] Fix | Delete
*
[35] Fix | Delete
* @since 4.4.0
[36] Fix | Delete
* @var string
[37] Fix | Delete
*/
[38] Fix | Delete
const EDITABLE = 'POST, PUT, PATCH';
[39] Fix | Delete
[40] Fix | Delete
/**
[41] Fix | Delete
* Alias for DELETE transport method.
[42] Fix | Delete
*
[43] Fix | Delete
* @since 4.4.0
[44] Fix | Delete
* @var string
[45] Fix | Delete
*/
[46] Fix | Delete
const DELETABLE = 'DELETE';
[47] Fix | Delete
[48] Fix | Delete
/**
[49] Fix | Delete
* Alias for GET, POST, PUT, PATCH & DELETE transport methods together.
[50] Fix | Delete
*
[51] Fix | Delete
* @since 4.4.0
[52] Fix | Delete
* @var string
[53] Fix | Delete
*/
[54] Fix | Delete
const ALLMETHODS = 'GET, POST, PUT, PATCH, DELETE';
[55] Fix | Delete
[56] Fix | Delete
/**
[57] Fix | Delete
* Namespaces registered to the server.
[58] Fix | Delete
*
[59] Fix | Delete
* @since 4.4.0
[60] Fix | Delete
* @var array
[61] Fix | Delete
*/
[62] Fix | Delete
protected $namespaces = array();
[63] Fix | Delete
[64] Fix | Delete
/**
[65] Fix | Delete
* Endpoints registered to the server.
[66] Fix | Delete
*
[67] Fix | Delete
* @since 4.4.0
[68] Fix | Delete
* @var array
[69] Fix | Delete
*/
[70] Fix | Delete
protected $endpoints = array();
[71] Fix | Delete
[72] Fix | Delete
/**
[73] Fix | Delete
* Options defined for the routes.
[74] Fix | Delete
*
[75] Fix | Delete
* @since 4.4.0
[76] Fix | Delete
* @var array
[77] Fix | Delete
*/
[78] Fix | Delete
protected $route_options = array();
[79] Fix | Delete
[80] Fix | Delete
/**
[81] Fix | Delete
* Caches embedded requests.
[82] Fix | Delete
*
[83] Fix | Delete
* @since 5.4.0
[84] Fix | Delete
* @var array
[85] Fix | Delete
*/
[86] Fix | Delete
protected $embed_cache = array();
[87] Fix | Delete
[88] Fix | Delete
/**
[89] Fix | Delete
* Stores request objects that are currently being handled.
[90] Fix | Delete
*
[91] Fix | Delete
* @since 6.5.0
[92] Fix | Delete
* @var array
[93] Fix | Delete
*/
[94] Fix | Delete
protected $dispatching_requests = array();
[95] Fix | Delete
[96] Fix | Delete
/**
[97] Fix | Delete
* Instantiates the REST server.
[98] Fix | Delete
*
[99] Fix | Delete
* @since 4.4.0
[100] Fix | Delete
*/
[101] Fix | Delete
public function __construct() {
[102] Fix | Delete
$this->endpoints = array(
[103] Fix | Delete
// Meta endpoints.
[104] Fix | Delete
'/' => array(
[105] Fix | Delete
'callback' => array( $this, 'get_index' ),
[106] Fix | Delete
'methods' => 'GET',
[107] Fix | Delete
'args' => array(
[108] Fix | Delete
'context' => array(
[109] Fix | Delete
'default' => 'view',
[110] Fix | Delete
),
[111] Fix | Delete
),
[112] Fix | Delete
),
[113] Fix | Delete
'/batch/v1' => array(
[114] Fix | Delete
'callback' => array( $this, 'serve_batch_request_v1' ),
[115] Fix | Delete
'methods' => 'POST',
[116] Fix | Delete
'args' => array(
[117] Fix | Delete
'validation' => array(
[118] Fix | Delete
'type' => 'string',
[119] Fix | Delete
'enum' => array( 'require-all-validate', 'normal' ),
[120] Fix | Delete
'default' => 'normal',
[121] Fix | Delete
),
[122] Fix | Delete
'requests' => array(
[123] Fix | Delete
'required' => true,
[124] Fix | Delete
'type' => 'array',
[125] Fix | Delete
'maxItems' => $this->get_max_batch_size(),
[126] Fix | Delete
'items' => array(
[127] Fix | Delete
'type' => 'object',
[128] Fix | Delete
'properties' => array(
[129] Fix | Delete
'method' => array(
[130] Fix | Delete
'type' => 'string',
[131] Fix | Delete
'enum' => array( 'POST', 'PUT', 'PATCH', 'DELETE' ),
[132] Fix | Delete
'default' => 'POST',
[133] Fix | Delete
),
[134] Fix | Delete
'path' => array(
[135] Fix | Delete
'type' => 'string',
[136] Fix | Delete
'required' => true,
[137] Fix | Delete
),
[138] Fix | Delete
'body' => array(
[139] Fix | Delete
'type' => 'object',
[140] Fix | Delete
'properties' => array(),
[141] Fix | Delete
'additionalProperties' => true,
[142] Fix | Delete
),
[143] Fix | Delete
'headers' => array(
[144] Fix | Delete
'type' => 'object',
[145] Fix | Delete
'properties' => array(),
[146] Fix | Delete
'additionalProperties' => array(
[147] Fix | Delete
'type' => array( 'string', 'array' ),
[148] Fix | Delete
'items' => array(
[149] Fix | Delete
'type' => 'string',
[150] Fix | Delete
),
[151] Fix | Delete
),
[152] Fix | Delete
),
[153] Fix | Delete
),
[154] Fix | Delete
),
[155] Fix | Delete
),
[156] Fix | Delete
),
[157] Fix | Delete
),
[158] Fix | Delete
);
[159] Fix | Delete
}
[160] Fix | Delete
[161] Fix | Delete
[162] Fix | Delete
/**
[163] Fix | Delete
* Checks the authentication headers if supplied.
[164] Fix | Delete
*
[165] Fix | Delete
* @since 4.4.0
[166] Fix | Delete
*
[167] Fix | Delete
* @return WP_Error|null|true WP_Error indicates unsuccessful login, null indicates successful
[168] Fix | Delete
* or no authentication provided
[169] Fix | Delete
*/
[170] Fix | Delete
public function check_authentication() {
[171] Fix | Delete
/**
[172] Fix | Delete
* Filters REST API authentication errors.
[173] Fix | Delete
*
[174] Fix | Delete
* This is used to pass a WP_Error from an authentication method back to
[175] Fix | Delete
* the API.
[176] Fix | Delete
*
[177] Fix | Delete
* Authentication methods should check first if they're being used, as
[178] Fix | Delete
* multiple authentication methods can be enabled on a site (cookies,
[179] Fix | Delete
* HTTP basic auth, OAuth). If the authentication method hooked in is
[180] Fix | Delete
* not actually being attempted, null should be returned to indicate
[181] Fix | Delete
* another authentication method should check instead. Similarly,
[182] Fix | Delete
* callbacks should ensure the value is `null` before checking for
[183] Fix | Delete
* errors.
[184] Fix | Delete
*
[185] Fix | Delete
* A WP_Error instance can be returned if an error occurs, and this should
[186] Fix | Delete
* match the format used by API methods internally (that is, the `status`
[187] Fix | Delete
* data should be used). A callback can return `true` to indicate that
[188] Fix | Delete
* the authentication method was used, and it succeeded.
[189] Fix | Delete
*
[190] Fix | Delete
* @since 4.4.0
[191] Fix | Delete
*
[192] Fix | Delete
* @param WP_Error|null|true $errors WP_Error if authentication error, null if authentication
[193] Fix | Delete
* method wasn't used, true if authentication succeeded.
[194] Fix | Delete
*/
[195] Fix | Delete
return apply_filters( 'rest_authentication_errors', null );
[196] Fix | Delete
}
[197] Fix | Delete
[198] Fix | Delete
/**
[199] Fix | Delete
* Converts an error to a response object.
[200] Fix | Delete
*
[201] Fix | Delete
* This iterates over all error codes and messages to change it into a flat
[202] Fix | Delete
* array. This enables simpler client behavior, as it is represented as a
[203] Fix | Delete
* list in JSON rather than an object/map.
[204] Fix | Delete
*
[205] Fix | Delete
* @since 4.4.0
[206] Fix | Delete
* @since 5.7.0 Converted to a wrapper of {@see rest_convert_error_to_response()}.
[207] Fix | Delete
*
[208] Fix | Delete
* @param WP_Error $error WP_Error instance.
[209] Fix | Delete
* @return WP_REST_Response List of associative arrays with code and message keys.
[210] Fix | Delete
*/
[211] Fix | Delete
protected function error_to_response( $error ) {
[212] Fix | Delete
return rest_convert_error_to_response( $error );
[213] Fix | Delete
}
[214] Fix | Delete
[215] Fix | Delete
/**
[216] Fix | Delete
* Retrieves an appropriate error representation in JSON.
[217] Fix | Delete
*
[218] Fix | Delete
* Note: This should only be used in WP_REST_Server::serve_request(), as it
[219] Fix | Delete
* cannot handle WP_Error internally. All callbacks and other internal methods
[220] Fix | Delete
* should instead return a WP_Error with the data set to an array that includes
[221] Fix | Delete
* a 'status' key, with the value being the HTTP status to send.
[222] Fix | Delete
*
[223] Fix | Delete
* @since 4.4.0
[224] Fix | Delete
*
[225] Fix | Delete
* @param string $code WP_Error-style code.
[226] Fix | Delete
* @param string $message Human-readable message.
[227] Fix | Delete
* @param int $status Optional. HTTP status code to send. Default null.
[228] Fix | Delete
* @return string JSON representation of the error
[229] Fix | Delete
*/
[230] Fix | Delete
protected function json_error( $code, $message, $status = null ) {
[231] Fix | Delete
if ( $status ) {
[232] Fix | Delete
$this->set_status( $status );
[233] Fix | Delete
}
[234] Fix | Delete
[235] Fix | Delete
$error = compact( 'code', 'message' );
[236] Fix | Delete
[237] Fix | Delete
return wp_json_encode( $error );
[238] Fix | Delete
}
[239] Fix | Delete
[240] Fix | Delete
/**
[241] Fix | Delete
* Gets the encoding options passed to {@see wp_json_encode}.
[242] Fix | Delete
*
[243] Fix | Delete
* @since 6.1.0
[244] Fix | Delete
*
[245] Fix | Delete
* @param \WP_REST_Request $request The current request object.
[246] Fix | Delete
*
[247] Fix | Delete
* @return int The JSON encode options.
[248] Fix | Delete
*/
[249] Fix | Delete
protected function get_json_encode_options( WP_REST_Request $request ) {
[250] Fix | Delete
$options = 0;
[251] Fix | Delete
[252] Fix | Delete
if ( $request->has_param( '_pretty' ) ) {
[253] Fix | Delete
$options |= JSON_PRETTY_PRINT;
[254] Fix | Delete
}
[255] Fix | Delete
[256] Fix | Delete
/**
[257] Fix | Delete
* Filters the JSON encoding options used to send the REST API response.
[258] Fix | Delete
*
[259] Fix | Delete
* @since 6.1.0
[260] Fix | Delete
*
[261] Fix | Delete
* @param int $options JSON encoding options {@see json_encode()}.
[262] Fix | Delete
* @param WP_REST_Request $request Current request object.
[263] Fix | Delete
*/
[264] Fix | Delete
return apply_filters( 'rest_json_encode_options', $options, $request );
[265] Fix | Delete
}
[266] Fix | Delete
[267] Fix | Delete
/**
[268] Fix | Delete
* Handles serving a REST API request.
[269] Fix | Delete
*
[270] Fix | Delete
* Matches the current server URI to a route and runs the first matching
[271] Fix | Delete
* callback then outputs a JSON representation of the returned value.
[272] Fix | Delete
*
[273] Fix | Delete
* @since 4.4.0
[274] Fix | Delete
*
[275] Fix | Delete
* @see WP_REST_Server::dispatch()
[276] Fix | Delete
*
[277] Fix | Delete
* @global WP_User $current_user The currently authenticated user.
[278] Fix | Delete
*
[279] Fix | Delete
* @param string $path Optional. The request route. If not set, `$_SERVER['PATH_INFO']` will be used.
[280] Fix | Delete
* Default null.
[281] Fix | Delete
* @return null|false Null if not served and a HEAD request, false otherwise.
[282] Fix | Delete
*/
[283] Fix | Delete
public function serve_request( $path = null ) {
[284] Fix | Delete
/* @var WP_User|null $current_user */
[285] Fix | Delete
global $current_user;
[286] Fix | Delete
[287] Fix | Delete
if ( $current_user instanceof WP_User && ! $current_user->exists() ) {
[288] Fix | Delete
/*
[289] Fix | Delete
* If there is no current user authenticated via other means, clear
[290] Fix | Delete
* the cached lack of user, so that an authenticate check can set it
[291] Fix | Delete
* properly.
[292] Fix | Delete
*
[293] Fix | Delete
* This is done because for authentications such as Application
[294] Fix | Delete
* Passwords, we don't want it to be accepted unless the current HTTP
[295] Fix | Delete
* request is a REST API request, which can't always be identified early
[296] Fix | Delete
* enough in evaluation.
[297] Fix | Delete
*/
[298] Fix | Delete
$current_user = null;
[299] Fix | Delete
}
[300] Fix | Delete
[301] Fix | Delete
/**
[302] Fix | Delete
* Filters whether JSONP is enabled for the REST API.
[303] Fix | Delete
*
[304] Fix | Delete
* @since 4.4.0
[305] Fix | Delete
*
[306] Fix | Delete
* @param bool $jsonp_enabled Whether JSONP is enabled. Default true.
[307] Fix | Delete
*/
[308] Fix | Delete
$jsonp_enabled = apply_filters( 'rest_jsonp_enabled', true );
[309] Fix | Delete
[310] Fix | Delete
$jsonp_callback = false;
[311] Fix | Delete
if ( isset( $_GET['_jsonp'] ) ) {
[312] Fix | Delete
$jsonp_callback = $_GET['_jsonp'];
[313] Fix | Delete
}
[314] Fix | Delete
[315] Fix | Delete
$content_type = ( $jsonp_callback && $jsonp_enabled ) ? 'application/javascript' : 'application/json';
[316] Fix | Delete
$this->send_header( 'Content-Type', $content_type . '; charset=' . get_option( 'blog_charset' ) );
[317] Fix | Delete
$this->send_header( 'X-Robots-Tag', 'noindex' );
[318] Fix | Delete
[319] Fix | Delete
$api_root = get_rest_url();
[320] Fix | Delete
if ( ! empty( $api_root ) ) {
[321] Fix | Delete
$this->send_header( 'Link', '<' . sanitize_url( $api_root ) . '>; rel="https://api.w.org/"' );
[322] Fix | Delete
}
[323] Fix | Delete
[324] Fix | Delete
/*
[325] Fix | Delete
* Mitigate possible JSONP Flash attacks.
[326] Fix | Delete
*
[327] Fix | Delete
* https://miki.it/blog/2014/7/8/abusing-jsonp-with-rosetta-flash/
[328] Fix | Delete
*/
[329] Fix | Delete
$this->send_header( 'X-Content-Type-Options', 'nosniff' );
[330] Fix | Delete
[331] Fix | Delete
/**
[332] Fix | Delete
* Filters whether the REST API is enabled.
[333] Fix | Delete
*
[334] Fix | Delete
* @since 4.4.0
[335] Fix | Delete
* @deprecated 4.7.0 Use the {@see 'rest_authentication_errors'} filter to
[336] Fix | Delete
* restrict access to the REST API.
[337] Fix | Delete
*
[338] Fix | Delete
* @param bool $rest_enabled Whether the REST API is enabled. Default true.
[339] Fix | Delete
*/
[340] Fix | Delete
apply_filters_deprecated(
[341] Fix | Delete
'rest_enabled',
[342] Fix | Delete
array( true ),
[343] Fix | Delete
'4.7.0',
[344] Fix | Delete
'rest_authentication_errors',
[345] Fix | Delete
sprintf(
[346] Fix | Delete
/* translators: %s: rest_authentication_errors */
[347] Fix | Delete
__( 'The REST API can no longer be completely disabled, the %s filter can be used to restrict access to the API, instead.' ),
[348] Fix | Delete
'rest_authentication_errors'
[349] Fix | Delete
)
[350] Fix | Delete
);
[351] Fix | Delete
[352] Fix | Delete
if ( $jsonp_callback ) {
[353] Fix | Delete
if ( ! $jsonp_enabled ) {
[354] Fix | Delete
echo $this->json_error( 'rest_callback_disabled', __( 'JSONP support is disabled on this site.' ), 400 );
[355] Fix | Delete
return false;
[356] Fix | Delete
}
[357] Fix | Delete
[358] Fix | Delete
if ( ! wp_check_jsonp_callback( $jsonp_callback ) ) {
[359] Fix | Delete
echo $this->json_error( 'rest_callback_invalid', __( 'Invalid JSONP callback function.' ), 400 );
[360] Fix | Delete
return false;
[361] Fix | Delete
}
[362] Fix | Delete
}
[363] Fix | Delete
[364] Fix | Delete
if ( empty( $path ) ) {
[365] Fix | Delete
if ( isset( $_SERVER['PATH_INFO'] ) ) {
[366] Fix | Delete
$path = $_SERVER['PATH_INFO'];
[367] Fix | Delete
} else {
[368] Fix | Delete
$path = '/';
[369] Fix | Delete
}
[370] Fix | Delete
}
[371] Fix | Delete
[372] Fix | Delete
$request = new WP_REST_Request( $_SERVER['REQUEST_METHOD'], $path );
[373] Fix | Delete
[374] Fix | Delete
$request->set_query_params( wp_unslash( $_GET ) );
[375] Fix | Delete
$request->set_body_params( wp_unslash( $_POST ) );
[376] Fix | Delete
$request->set_file_params( $_FILES );
[377] Fix | Delete
$request->set_headers( $this->get_headers( wp_unslash( $_SERVER ) ) );
[378] Fix | Delete
$request->set_body( self::get_raw_data() );
[379] Fix | Delete
[380] Fix | Delete
/*
[381] Fix | Delete
* HTTP method override for clients that can't use PUT/PATCH/DELETE. First, we check
[382] Fix | Delete
* $_GET['_method']. If that is not set, we check for the HTTP_X_HTTP_METHOD_OVERRIDE
[383] Fix | Delete
* header.
[384] Fix | Delete
*/
[385] Fix | Delete
$method_overridden = false;
[386] Fix | Delete
if ( isset( $_GET['_method'] ) ) {
[387] Fix | Delete
$request->set_method( $_GET['_method'] );
[388] Fix | Delete
} elseif ( isset( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] ) ) {
[389] Fix | Delete
$request->set_method( $_SERVER['HTTP_X_HTTP_METHOD_OVERRIDE'] );
[390] Fix | Delete
$method_overridden = true;
[391] Fix | Delete
}
[392] Fix | Delete
[393] Fix | Delete
$expose_headers = array( 'X-WP-Total', 'X-WP-TotalPages', 'Link' );
[394] Fix | Delete
[395] Fix | Delete
/**
[396] Fix | Delete
* Filters the list of response headers that are exposed to REST API CORS requests.
[397] Fix | Delete
*
[398] Fix | Delete
* @since 5.5.0
[399] Fix | Delete
* @since 6.3.0 The `$request` parameter was added.
[400] Fix | Delete
*
[401] Fix | Delete
* @param string[] $expose_headers The list of response headers to expose.
[402] Fix | Delete
* @param WP_REST_Request $request The request in context.
[403] Fix | Delete
*/
[404] Fix | Delete
$expose_headers = apply_filters( 'rest_exposed_cors_headers', $expose_headers, $request );
[405] Fix | Delete
[406] Fix | Delete
$this->send_header( 'Access-Control-Expose-Headers', implode( ', ', $expose_headers ) );
[407] Fix | Delete
[408] Fix | Delete
$allow_headers = array(
[409] Fix | Delete
'Authorization',
[410] Fix | Delete
'X-WP-Nonce',
[411] Fix | Delete
'Content-Disposition',
[412] Fix | Delete
'Content-MD5',
[413] Fix | Delete
'Content-Type',
[414] Fix | Delete
);
[415] Fix | Delete
[416] Fix | Delete
/**
[417] Fix | Delete
* Filters the list of request headers that are allowed for REST API CORS requests.
[418] Fix | Delete
*
[419] Fix | Delete
* The allowed headers are passed to the browser to specify which
[420] Fix | Delete
* headers can be passed to the REST API. By default, we allow the
[421] Fix | Delete
* Content-* headers needed to upload files to the media endpoints.
[422] Fix | Delete
* As well as the Authorization and Nonce headers for allowing authentication.
[423] Fix | Delete
*
[424] Fix | Delete
* @since 5.5.0
[425] Fix | Delete
* @since 6.3.0 The `$request` parameter was added.
[426] Fix | Delete
*
[427] Fix | Delete
* @param string[] $allow_headers The list of request headers to allow.
[428] Fix | Delete
* @param WP_REST_Request $request The request in context.
[429] Fix | Delete
*/
[430] Fix | Delete
$allow_headers = apply_filters( 'rest_allowed_cors_headers', $allow_headers, $request );
[431] Fix | Delete
[432] Fix | Delete
$this->send_header( 'Access-Control-Allow-Headers', implode( ', ', $allow_headers ) );
[433] Fix | Delete
[434] Fix | Delete
$result = $this->check_authentication();
[435] Fix | Delete
[436] Fix | Delete
if ( ! is_wp_error( $result ) ) {
[437] Fix | Delete
$result = $this->dispatch( $request );
[438] Fix | Delete
}
[439] Fix | Delete
[440] Fix | Delete
// Normalize to either WP_Error or WP_REST_Response...
[441] Fix | Delete
$result = rest_ensure_response( $result );
[442] Fix | Delete
[443] Fix | Delete
// ...then convert WP_Error across.
[444] Fix | Delete
if ( is_wp_error( $result ) ) {
[445] Fix | Delete
$result = $this->error_to_response( $result );
[446] Fix | Delete
}
[447] Fix | Delete
[448] Fix | Delete
/**
[449] Fix | Delete
* Filters the REST API response.
[450] Fix | Delete
*
[451] Fix | Delete
* Allows modification of the response before returning.
[452] Fix | Delete
*
[453] Fix | Delete
* @since 4.4.0
[454] Fix | Delete
* @since 4.5.0 Applied to embedded responses.
[455] Fix | Delete
*
[456] Fix | Delete
* @param WP_HTTP_Response $result Result to send to the client. Usually a `WP_REST_Response`.
[457] Fix | Delete
* @param WP_REST_Server $server Server instance.
[458] Fix | Delete
* @param WP_REST_Request $request Request used to generate the response.
[459] Fix | Delete
*/
[460] Fix | Delete
$result = apply_filters( 'rest_post_dispatch', rest_ensure_response( $result ), $this, $request );
[461] Fix | Delete
[462] Fix | Delete
// Wrap the response in an envelope if asked for.
[463] Fix | Delete
if ( isset( $_GET['_envelope'] ) ) {
[464] Fix | Delete
$embed = isset( $_GET['_embed'] ) ? rest_parse_embed_param( $_GET['_embed'] ) : false;
[465] Fix | Delete
$result = $this->envelope_response( $result, $embed );
[466] Fix | Delete
}
[467] Fix | Delete
[468] Fix | Delete
// Send extra data from response objects.
[469] Fix | Delete
$headers = $result->get_headers();
[470] Fix | Delete
$this->send_headers( $headers );
[471] Fix | Delete
[472] Fix | Delete
$code = $result->get_status();
[473] Fix | Delete
$this->set_status( $code );
[474] Fix | Delete
[475] Fix | Delete
/**
[476] Fix | Delete
* Filters whether to send no-cache headers on a REST API request.
[477] Fix | Delete
*
[478] Fix | Delete
* @since 4.4.0
[479] Fix | Delete
* @since 6.3.2 Moved the block to catch the filter added on rest_cookie_check_errors() from wp-includes/rest-api.php.
[480] Fix | Delete
*
[481] Fix | Delete
* @param bool $rest_send_nocache_headers Whether to send no-cache headers.
[482] Fix | Delete
*/
[483] Fix | Delete
$send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
[484] Fix | Delete
[485] Fix | Delete
/*
[486] Fix | Delete
* Send no-cache headers if $send_no_cache_headers is true,
[487] Fix | Delete
* OR if the HTTP_X_HTTP_METHOD_OVERRIDE is used but resulted a 4xx response code.
[488] Fix | Delete
*/
[489] Fix | Delete
if ( $send_no_cache_headers || ( true === $method_overridden && str_starts_with( $code, '4' ) ) ) {
[490] Fix | Delete
foreach ( wp_get_nocache_headers() as $header => $header_value ) {
[491] Fix | Delete
if ( empty( $header_value ) ) {
[492] Fix | Delete
$this->remove_header( $header );
[493] Fix | Delete
} else {
[494] Fix | Delete
$this->send_header( $header, $header_value );
[495] Fix | Delete
}
[496] Fix | Delete
}
[497] Fix | Delete
}
[498] Fix | Delete
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function