BP_Media_Extractor::extract_embeds( string $richtext, string $plaintext, array $extra_args = array() )
Extract any URL, matching a registered oEmbed endpoint, from text.
Description
Parameters
- $richtext
-
(Required) Content to parse.
- $plaintext
-
(Required) Sanitized version of the content.
- $extra_args
-
(Optional) Bespoke data for a particular extractor (optional).
Default value: array()
Return
(array)
- 'has'
(array) Extracted media counts. { - 'embeds'
(int)
(array) Extracted oEmbeds. { Array of extracted media.
(string) oEmbed link.
Source
File: bp-core/classes/class-bp-media-extractor.php
protected function extract_embeds( $richtext, $plaintext, $extra_args = array() ) { $data = array( 'has' => array( 'embeds' => 0 ), 'embeds' => array() ); $embeds = array(); if ( ! function_exists( '_wp_oembed_get_object' ) ) { require( ABSPATH . WPINC . '/class-oembed.php' ); } // Matches any links on their own lines. They may be oEmbeds. if ( stripos( $richtext, 'http' ) !== false ) { preg_match_all( '#^\s*(https?://[^\s"]+)\s*$#im', $richtext, $matches ); if ( ! empty( $matches[1] ) ) { $matches[1] = array_unique( $matches[1] ); $oembed = _wp_oembed_get_object(); foreach ( $matches[1] as $link ) { // Skip data URIs. if ( strtolower( substr( $link, 0, 5 ) ) === 'data:' ) { continue; } foreach ( $oembed->providers as $matchmask => $oembed_data ) { list( , $is_regex ) = $oembed_data; // Turn asterisk-type provider URLs into regexs. if ( ! $is_regex ) { $matchmask = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i'; $matchmask = preg_replace( '|^#http\\\://|', '#https?\://', $matchmask ); } // Check whether this "link" is really an oEmbed. if ( preg_match( $matchmask, $link ) ) { $data['embeds'][] = array( 'url' => $link ); break; } } } } } $data['has']['embeds'] = count( $data['embeds'] ); /** * Filters embeds extracted from text. * * @since BuddyPress 2.3.0 * * @param array $data Extracted embeds. See {@link BP_Media_Extractor::extract_embeds()} for format. * @param string $richtext Content to parse. * @param string $plaintext Copy of $richtext without any markup. * @param array $extra_args Bespoke data for a particular extractor. */ return apply_filters( 'bp_media_extractor_embeds', $data, $richtext, $plaintext, $extra_args ); }
Changelog
Version | Description |
---|---|
BuddyPress 2.3.0 | Introduced. |
Questions?
We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.