Embed object to check URL with registered oEmbed providers. if ( file_exists( ABSPATH . WPINC . '/class-wp-oembed.php' ) ) { require_once( ABSPATH . WPINC . '/class-wp-oembed.php' ); } else { // class-oembed.php is deprecated in WordPress 5.3.0. require_once( ABSPATH . WPINC . '/class-oembed.php' ); } $oembed_obj = _wp_oembed_get_object(); // If oEmbed discovery is true, skip oEmbed provider check. $is_oembed_link = false; if ( !$attr['discover'] ) { foreach ( (array) $oembed_obj->providers as $provider_matchmask => $provider ) { $regex = ( $is_regex = $provider[1] ) ? $provider_matchmask : '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $provider_matchmask ), '#' ) ) . '#i'; if ( preg_match( $regex, $url ) ) $is_oembed_link = true; } // If url doesn't match a WP oEmbed provider, stop parsing. if ( !$is_oembed_link ) return $this->maybe_make_link( $url ); } return $this->parse_oembed( $id, $url, $attr, $rawattr ); } /** * Base function so BP components/plugins can parse links to be embedded. * * View an example to add support in {@link bp_activity_embed()}. * * on success. * oEmbed failure. * * @param int $id ID to do the caching for. * @param string $url The URL attempting to be embedded. * @param array $attr Shortcode attributes from {@link WP_Embed::shortcode()}. * @param array $rawattr Untouched shortcode attributes from * {@link WP_Embed::shortcode()}. * @return string The embed HTML on success, otherwise the original URL. */ public function parse_oembed( $id, $url, $attr, $rawattr ) { $id = intval( $id ); if ( $id ) { // Setup the cachekey. $cachekey = '_oembed_' . md5( $url . serialize( $attr ) ); // Let components / plugins grab their cache. $cache = ''; /** * Filters the cache value to be used in the oEmbed, if exists. * * @since 1.5.0 * * @param string $cache Empty initial cache value. * @param int $id ID that the caching is for. * @param string $cachekey Key to use for the caching in the database. * @param string $url The URL attempting to be embedded. * @param array $attr Parsed shortcode attributes. * @param array $rawattr Unparsed shortcode attributes. */ $cache = apply_filters( 'bp_embed_get_cache', $cache, $id, $cachekey, $url, $attr, $rawattr ); // Grab cache and return it if available. if ( !empty( $cache ) ) { /** * Filters the found cache for the provided URL. * * @since 1.5.0 * * @param string $cache Cached HTML markup for embed. * @param string $url The URL being embedded. * @param array $attr Parsed shortcode attributes. * @param array $rawattr Unparased shortcode attributes. */ return apply_filters( 'bp_embed_oembed_html', $cache, $url, $attr, $rawattr ); // If no cache, ping the oEmbed provider and cache the result. } else { $html = wp_oembed_get( $url, $attr ); $cache = ( $html ) ? $html : $url; /** * Fires if there is no existing cache and triggers cache setting. * * Lets components / plugins save their cache. * * @since 1.5.0 * * @param string $cache Newly cached HTML markup for embed. * @param string $cachekey Key to use for the caching in the database. * @param int $id ID to do the caching for. */ do_action( 'bp_embed_update_cache', $cache, $cachekey, $id ); // If there was a result, return it. if ( $html ) { /** This filter is documented in bp-core/classes/class-bp-embed.php */ return apply_filters( 'bp_embed_oembed_html', $html, $url, $attr, $rawattr ); } } } // Still unknown. return $this->maybe_make_link( $url ); } }