WP_Customize_Header_Image_Setting::sanitize_choice │ private │ WP 7.1.1

Sanitizes a header image choice.

This is the value which is ultimately passed to Custom_Image_Header::set_header_image(), whether supplied at the top level of the setting value or nested under its legacy choice key.

Method of the class: WP_Customize_Header_Image_Setting{}

No Hooks.

Returns

array|string|WP_Error|null. Sanitized value, or null/WP_Error if invalid.

Usage

// private - for code of main (parent) class only
$result = $this->sanitize_choice( $value );
$value(mixed) (required)
Value to sanitize.

Changelog

Since 7.1.1 Introduced.

WP_Customize_Header_Image_Setting::sanitize_choice() code WP 7.1.2

private function sanitize_choice( $value ) {
	// Custom_Image_Header::set_header_image() accepts an object in place of an array.
	if ( is_object( $value ) ) {
		$value = (array) $value;
	}

	if ( is_string( $value ) ) {
		return sanitize_text_field( $value );
	}

	if ( ! is_array( $value ) ) {
		return null;
	}

	/*
	 * The sanitized value is assembled member by member rather than filtered down from the
	 * supplied one, so that nothing but the members below can end up in it.
	 */
	$sanitized = array();

	if ( isset( $value['attachment_id'] ) ) {
		if ( ! is_scalar( $value['attachment_id'] ) ) {
			return null;
		}
		$attachment_id = absint( $value['attachment_id'] );

		/*
		 * A supplied attachment must be an existing image, since its ID is written to postmeta and its
		 * data displayed. Note that an ID of zero must be skipped rather than looked up, as
		 * get_post_mime_type() falls back to the global post when passed an empty value.
		 */
		if ( $attachment_id > 0 ) {
			$mime_type = get_post_mime_type( $attachment_id );
			if ( ! is_string( $mime_type ) || ! str_starts_with( $mime_type, 'image/' ) ) {
				return null;
			}
		}

		$sanitized['attachment_id'] = $attachment_id;
	}

	if ( isset( $value['url'] ) ) {
		if ( ! is_string( $value['url'] ) ) {
			return null;
		}
		$sanitized['url'] = sanitize_url( $value['url'] );
		if ( '' === $sanitized['url'] ) {
			return new WP_Error( 'invalid_url', __( 'Invalid URL.' ) );
		}
	}

	if ( isset( $value['thumbnail_url'] ) ) {
		if ( ! is_string( $value['thumbnail_url'] ) ) {
			return null;
		}
		$sanitized['thumbnail_url'] = sanitize_url( $value['thumbnail_url'] );
		if ( '' === $sanitized['thumbnail_url'] ) {
			return new WP_Error( 'invalid_url', __( 'Invalid URL.' ) );
		}
	}

	if ( isset( $value['timestamp'] ) ) {
		if ( ! is_scalar( $value['timestamp'] ) ) {
			return null;
		}
		$sanitized['timestamp'] = absint( $value['timestamp'] );
	}

	if ( isset( $value['width'] ) ) {
		if ( ! is_scalar( $value['width'] ) ) {
			return null;
		}
		$sanitized['width'] = absint( $value['width'] );
	}

	if ( isset( $value['height'] ) ) {
		if ( ! is_scalar( $value['height'] ) ) {
			return null;
		}
		$sanitized['height'] = absint( $value['height'] );
	}

	if ( isset( $value['alt_text'] ) ) {
		if ( ! is_string( $value['alt_text'] ) ) {
			return null;
		}
		$sanitized['alt_text'] = sanitize_text_field( $value['alt_text'] );
	}

	if ( isset( $value['attachment_parent'] ) ) {
		if ( ! is_scalar( $value['attachment_parent'] ) ) {
			return null;
		}
		$sanitized['attachment_parent'] = absint( $value['attachment_parent'] );
	}

	return $sanitized;
}