BP_Embed::autoembed( string $content, $type = '' )
Passes any unlinked URLs that are on their own line to WP_Embed::shortcode() for potential embedding.
Description
See also
Parameters
- $content
-
(Required) The content to be searched.
Return
(string) Potentially modified $content.
Source
File: bp-core/classes/class-bp-embed.php
public function autoembed( $content, $type = '' ) { if ( isset( $type->component ) && ( 'activity_update' === $type->type || 'activity_comment' === $type->type ) ) { // Check if WordPress already embed the link then return the original content. if (strpos($content,'<iframe') !== false) { return $content; } else { // Find all the URLs from the content. preg_match_all('#\bhttps?://[^,\s()<>]+(?:\([\w\d]+\)|([^,[:punct:]\s]|/))#', $content, $match); // Check if URL found. if( isset( $match[0] ) ) { $html = ''; // Remove duplicate from array and run the loop foreach ( array_unique( $match[0] ) as $url ) { // Store oembed iframe in database cache for 1 day if ( false === ( $embed_code = get_transient( $url ) ) ) { // Fetch the oembed code for URL. $embed_code = wp_oembed_get( $url ); set_transient( $url, $embed_code, DAY_IN_SECONDS ); } // If oembed found then store into the $html if (strpos($embed_code,'<iframe') !== false) { $html .= '<p>'.$embed_code.'</p>'; } } // If $html blank return original content if ( '' === $html ) { return $content; // Return the new content by adding oembed after the content. } else { return $content.$html; } // Else return original content. } else { return $content; } } } // Replace line breaks from all HTML elements with placeholders. $content = wp_replace_in_html_tags( $content, array( "\n" => '<!-- wp-line-break -->' ) ); $old_content = $content; if ( preg_match( '#(^|\s|>)https?://#i', $content ) ) { $url = '@(http(s)?)?(://)?(([a-zA-Z])([-\w]+\.)+([^\s\.]+[^\s]*)+[^,.\s])@'; $content = preg_replace($url, '<p>$0</p>', $content); // Find URLs on their own line. $content = preg_replace_callback( '|^(\s*)(https?://[^\s<>"]+)(\s*)$|im', array( $this, 'autoembed_callback' ), $content ); // Find URLs in their own paragraph. $content = preg_replace_callback( '|(<p(?: [^>]*)?>\s*)(https?://[^\s<>"]+)(\s*<\/p>)|i', array( $this, 'autoembed_callback' ), $content ); } if (strpos($content,'<iframe') !== false) { } else { $content = $old_content; } // Put the line breaks back. return str_replace( '<!-- wp-line-break -->', "\n", $content ); }
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.