WP_REST_URL_Details_Controller::get_metadata_from_meta_element()
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() WP REST URL Details Controller::get metadata from meta element code WP 6.6.1
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; }