WP_REST_URL_Details_Controller::get_metadata_from_meta_element()privateWP 5.9.0

Gets the metadata from a target meta element.

Method of the class: WP_REST_URL_Details_Controller{}

No Hooks.

Return

String. The metadata on success. Empty string if not found.

Usage

// private - for code of main (parent) class only
$result = $this->get_metadata_from_meta_element( $meta_elements, $attr, $attr_value );
$meta_elements(array) (required)

A multi-dimensional indexed array on success, else empty array.

  • 0(string[])
    Meta elements with a content attribute.

  • 1(string[])
    Content attribute's opening quotation mark.

  • 2(string[])
    Content attribute's value for each meta element.
$attr(string) (required)
Attribute that identifies the element with the target metadata.
$attr_value(string) (required)
The attribute's value that identifies the element with the target metadata.

Changelog

Since 5.9.0 Introduced.

WP_REST_URL_Details_Controller::get_metadata_from_meta_element() code WP 6.5.2

private function get_metadata_from_meta_element( $meta_elements, $attr, $attr_value ) {
	// Bail out if there are no meta elements.
	if ( empty( $meta_elements[0] ) ) {
		return '';
	}

	$metadata = '';
	$pattern  = '#' .
			/*
			 * Target this attribute and value to find the metadata element.
			 *
			 * Allows for (a) no, single, double quotes and (b) whitespace in the value.
			 *
			 * Why capture the opening quotation mark, i.e. (["\']), and then backreference,
			 * i.e \1, for the closing quotation mark?
			 * To ensure the closing quotation mark matches the opening one. Why? Attribute values
			 * can contain quotation marks, such as an apostrophe in the content.
			 */
			$attr . '=([\"\']??)\s*' . $attr_value . '\s*\1' .

			/*
			 * These are the options:
			 * - i : case insensitive
			 * - s : allows newline characters for the . match (needed for multiline elements)
			 * - U means non-greedy matching
			 */
			'#isU';

	// Find the metadata element.
	foreach ( $meta_elements[0] as $index => $element ) {
		preg_match( $pattern, $element, $match );

		// This is not the metadata element. Skip it.
		if ( empty( $match ) ) {
			continue;
		}

		/*
		 * Found the metadata element.
		 * Get the metadata from its matching content array.
		 */
		if ( isset( $meta_elements[2][ $index ] ) && is_string( $meta_elements[2][ $index ] ) ) {
			$metadata = trim( $meta_elements[2][ $index ] );
		}

		break;
	}

	return $metadata;
}