W3cubDocs

/WordPress

WP_REST_URL_Details_Controller::get_metadata_from_meta_element( array $meta_elements, string $attr, string $attr_value ): string

Gets the metadata from a target meta element.

Parameters

$meta_elementsarrayrequired
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.
$attrstringrequired
Attribute that identifies the element with the target metadata.
$attr_valuestringrequired
The attribute’s value that identifies the element with the target metadata.

Return

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

Source

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;
}

Changelog

Version Description
5.9.0 Introduced.

© 2003–2024 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_rest_url_details_controller/get_metadata_from_meta_element