WP_REST_Request::has_valid_params()publicWP 4.4.0

Checks whether this request is valid according to its attributes.

Method of the class: WP_REST_Request{}

No Hooks.

Return

true|WP_Error. True if there are no parameters to validate or if all pass validation, WP_Error if required parameters are missing.

Usage

$WP_REST_Request = new WP_REST_Request();
$WP_REST_Request->has_valid_params();

Changelog

Since 4.4.0 Introduced.

WP_REST_Request::has_valid_params() code WP 6.5.2

public function has_valid_params() {
	// If JSON data was passed, check for errors.
	$json_error = $this->parse_json_params();
	if ( is_wp_error( $json_error ) ) {
		return $json_error;
	}

	$attributes = $this->get_attributes();
	$required   = array();

	$args = empty( $attributes['args'] ) ? array() : $attributes['args'];

	foreach ( $args as $key => $arg ) {
		$param = $this->get_param( $key );
		if ( isset( $arg['required'] ) && true === $arg['required'] && null === $param ) {
			$required[] = $key;
		}
	}

	if ( ! empty( $required ) ) {
		return new WP_Error(
			'rest_missing_callback_param',
			/* translators: %s: List of required parameters. */
			sprintf( __( 'Missing parameter(s): %s' ), implode( ', ', $required ) ),
			array(
				'status' => 400,
				'params' => $required,
			)
		);
	}

	/*
	 * Check the validation callbacks for each registered arg.
	 *
	 * This is done after required checking as required checking is cheaper.
	 */
	$invalid_params  = array();
	$invalid_details = array();

	foreach ( $args as $key => $arg ) {

		$param = $this->get_param( $key );

		if ( null !== $param && ! empty( $arg['validate_callback'] ) ) {
			/** @var bool|\WP_Error $valid_check */
			$valid_check = call_user_func( $arg['validate_callback'], $param, $this, $key );

			if ( false === $valid_check ) {
				$invalid_params[ $key ] = __( 'Invalid parameter.' );
			}

			if ( is_wp_error( $valid_check ) ) {
				$invalid_params[ $key ]  = implode( ' ', $valid_check->get_error_messages() );
				$invalid_details[ $key ] = rest_convert_error_to_response( $valid_check )->get_data();
			}
		}
	}

	if ( $invalid_params ) {
		return new WP_Error(
			'rest_invalid_param',
			/* translators: %s: List of invalid parameters. */
			sprintf( __( 'Invalid parameter(s): %s' ), implode( ', ', array_keys( $invalid_params ) ) ),
			array(
				'status'  => 400,
				'params'  => $invalid_params,
				'details' => $invalid_details,
			)
		);
	}

	if ( isset( $attributes['validate_callback'] ) ) {
		$valid_check = call_user_func( $attributes['validate_callback'], $this );

		if ( is_wp_error( $valid_check ) ) {
			return $valid_check;
		}

		if ( false === $valid_check ) {
			// A WP_Error instance is preferred, but false is supported for parity with the per-arg validate_callback.
			return new WP_Error( 'rest_invalid_params', __( 'Invalid parameters.' ), array( 'status' => 400 ) );
		}
	}

	return true;
}