public function test_wp_filter_pre_oembed_result_non_existent_post() { $post_id = self::factory()->post->create(); $permalink = get_permalink($post_id); $this->go_to($permalink); $this->assertQueryTrue('is_single', 'is_singular'); add_filter('pre_oembed_result', array($this, '_filter_pre_oembed_result')); $actual = $this->oembed->get_html('https://example.com/'); remove_filter('pre_oembed_result', array($this, '_filter_pre_oembed_result')); $this->assertTrue(false !== $this->pre_oembed_result_filtered); $this->assertFalse($actual); }
/** * The do-it-all function that takes a URL and attempts to return the HTML. * * @see WP_oEmbed::discover() * @see WP_oEmbed::fetch() * @see WP_oEmbed::data2html() * * @param string $url The URL to the content that should be attempted to be embedded. * @param array $args Optional arguments. Usually passed from a shortcode. * @return bool|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed. */ public function get_html($strURL, $arrArgs = array()) { if (isset($GLOBALS['arrFetchTweets_oEmbed'][$strURL])) { return $GLOBALS['arrFetchTweets_oEmbed'][$strURL]; } $strHTML = parent::get_html($strURL, $arrArgs); // Store the result in the global array. $GLOBALS['arrFetchTweets_oEmbed'][$strURL] = $strHTML; return $strHTML; }
public function get_data($url = '', $args = '') { if ($url) { $this->url = $url; } if (!$this->url) { return false; } //if it was already fetched if ($this->data) { return $this->data; } $provider = self::$oembed->get_provider($this->url, $args); if (!$provider) { return false; } $data = self::$oembed->fetch($provider, $this->url, $args); if (!$data) { return false; } $this->data = $data; return $this->data; }
/** * Filter the oembed results to see if we should do some extra handling * * @since 0.1 * @param string $html The original HTML returned from the external oembed provider. * @param string $url The URL found in the content. * @param mixed $attr An array with extra attributes. * @param int $post_id The post ID. * @return string The potentially filtered HTML. */ function instant_articles_embed_oembed_html($html, $url, $attr, $post_id) { if (!class_exists('WP_oEmbed')) { include_once ABSPATH . WPINC . '/class-oembed.php'; } // Instead of checking all possible URL variants, use the provider list from WP_oEmbed. $wp_oembed = new WP_oEmbed(); $provider_url = $wp_oembed->get_provider($url); $provider_name = false; if (false !== strpos($provider_url, 'instagram.com')) { $provider_name = 'instagram'; } elseif (false !== strpos($provider_url, 'twitter.com')) { $provider_name = 'twitter'; } elseif (false !== strpos($provider_url, 'youtube.com')) { $provider_name = 'youtube'; } elseif (false !== strpos($provider_url, 'vine.co')) { $provider_name = 'vine'; } $provider_name = apply_filters('instant_articles_social_embed_type', $provider_name, $url); if ($provider_name) { $html = instant_articles_embed_get_html($provider_name, $html, $url, $attr, $post_id); } return $html; }
/** * Removes an oEmbed provider. * * @since 3.5.0 * * @see WP_oEmbed * * @param string $format The URL format for the oEmbed provider to remove. * @return bool Was the provider removed successfully? */ function wp_oembed_remove_provider($format) { require_once ABSPATH . WPINC . '/class-oembed.php'; if (did_action('plugins_loaded')) { $oembed = _wp_oembed_get_object(); if (isset($oembed->providers[$format])) { unset($oembed->providers[$format]); return true; } } else { WP_oEmbed::_remove_provider_early($format); } return false; }
/** * Constructor * * @since 2.9.0 */ public function __construct() { $providers = array('#http://(www\\.)?youtube\\.com/watch.*#i' => array('http://www.youtube.com/oembed', true), '#https://(www\\.)?youtube\\.com/watch.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), '#http://(www\\.)?youtube\\.com/playlist.*#i' => array('http://www.youtube.com/oembed', true), '#https://(www\\.)?youtube\\.com/playlist.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), '#http://youtu\\.be/.*#i' => array('http://www.youtube.com/oembed', true), '#https://youtu\\.be/.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), 'http://blip.tv/*' => array('http://blip.tv/oembed/', false), '#https?://(.+\\.)?vimeo\\.com/.*#i' => array('http://vimeo.com/api/oembed.{format}', true), '#https?://(www\\.)?dailymotion\\.com/.*#i' => array('http://www.dailymotion.com/services/oembed', true), 'http://dai.ly/*' => array('http://www.dailymotion.com/services/oembed', false), '#https?://(www\\.)?flickr\\.com/.*#i' => array('https://www.flickr.com/services/oembed/', true), '#https?://flic\\.kr/.*#i' => array('https://www.flickr.com/services/oembed/', true), '#https?://(.+\\.)?smugmug\\.com/.*#i' => array('http://api.smugmug.com/services/oembed/', true), '#https?://(www\\.)?hulu\\.com/watch/.*#i' => array('http://www.hulu.com/api/oembed.{format}', true), 'http://revision3.com/*' => array('http://revision3.com/api/oembed/', false), 'http://i*.photobucket.com/albums/*' => array('http://photobucket.com/oembed', false), 'http://gi*.photobucket.com/groups/*' => array('http://photobucket.com/oembed', false), '#https?://(www\\.)?scribd\\.com/doc/.*#i' => array('http://www.scribd.com/services/oembed', true), '#https?://wordpress.tv/.*#i' => array('http://wordpress.tv/oembed/', true), '#https?://(.+\\.)?polldaddy\\.com/.*#i' => array('https://polldaddy.com/oembed/', true), '#https?://poll\\.fm/.*#i' => array('https://polldaddy.com/oembed/', true), '#https?://(www\\.)?funnyordie\\.com/videos/.*#i' => array('http://www.funnyordie.com/oembed', true), '#https?://(www\\.)?twitter\\.com/.+?/status(es)?/.*#i' => array('https://api.twitter.com/1/statuses/oembed.{format}', true), '#https?://(www\\.)?soundcloud\\.com/.*#i' => array('http://soundcloud.com/oembed', true), '#https?://(.+?\\.)?slideshare\\.net/.*#i' => array('https://www.slideshare.net/api/oembed/2', true), '#http://instagr(\\.am|am\\.com)/p/.*#i' => array('http://api.instagram.com/oembed', true), '#https?://(www\\.)?rdio\\.com/.*#i' => array('http://www.rdio.com/api/oembed/', true), '#https?://rd\\.io/x/.*#i' => array('http://www.rdio.com/api/oembed/', true), '#https?://(open|play)\\.spotify\\.com/.*#i' => array('https://embed.spotify.com/oembed/', true), '#https?://(.+\\.)?imgur\\.com/.*#i' => array('http://api.imgur.com/oembed', true), '#https?://(www\\.)?meetu(\\.ps|p\\.com)/.*#i' => array('http://api.meetup.com/oembed', true), '#https?://(www\\.)?issuu\\.com/.+/docs/.+#i' => array('http://issuu.com/oembed_wp', true), '#https?://(www\\.)?collegehumor\\.com/video/.*#i' => array('http://www.collegehumor.com/oembed.{format}', true), '#https?://(www\\.)?mixcloud\\.com/.*#i' => array('http://www.mixcloud.com/oembed', true), '#https?://(www\\.|embed\\.)?ted\\.com/talks/.*#i' => array('http://www.ted.com/talks/oembed.{format}', true), '#https?://(www\\.)?(animoto|video214)\\.com/play/.*#i' => array('http://animoto.com/oembeds/create', true)); if (!empty(self::$early_providers['add'])) { foreach (self::$early_providers['add'] as $format => $data) { $providers[$format] = $data; } } if (!empty(self::$early_providers['remove'])) { foreach (self::$early_providers['remove'] as $format) { unset($providers[$format]); } } self::$early_providers = array(); /** * Filter the list of oEmbed providers. * * Discovery is disabled for users lacking the unfiltered_html capability. * Only providers in this array will be used for those users. * * Supported providers: * * | ------------ | -------------------- | ----- | --------- | * | Provider | Flavor | SSL | Since | * | ------------ | -------------------- | ----- | --------- | * | Blip | blip.tv | | 2.9.0 | * | Dailymotion | dailymotion.com | Yes | 2.9.0 | * | Flickr | flickr.com | Yes | 2.9.0 | * | Hulu | hulu.com | Yes | 2.9.0 | * | Photobucket | photobucket.com | | 2.9.0 | * | Revision3 | revision3.com | | 2.9.0 | * | Scribd | scribd.com | Yes | 2.9.0 | * | Vimeo | vimeo.com | Yes | 2.9.0 | * | WordPress.tv | wordpress.tv | Yes | 2.9.0 | * | YouTube | youtube.com/watch | Yes | 2.9.0 | * | ------------ | -------------------- | ----- | --------- | * | Funny or Die | funnyordie.com | Yes | 3.0.0 | * | Polldaddy | polldaddy.com | Yes | 3.0.0 | * | SmugMug | smugmug.com | Yes | 3.0.0 | * | YouTube | youtu.be | Yes | 3.0.0 | * | ------------ | -------------------- | ----- | --------- | * | Twitter | twitter.com | Yes | 3.4.0 | * | ------------ | -------------------- | ----- | --------- | * | Instagram | instagram.com | | 3.5.0 | * | Instagram | instagr.am | | 3.5.0 | * | Slideshare | slideshare.net | Yes | 3.5.0 | * | SoundCloud | soundcloud.com | Yes | 3.5.0 | * | ------------ | -------------------- | ----- | --------- | * | Dailymotion | dai.ly | | 3.6.0 | * | Flickr | flic.kr | Yes | 3.6.0 | * | Rdio | rdio.com | Yes | 3.6.0 | * | Rdio | rd.io | Yes | 3.6.0 | * | Spotify | spotify.com | Yes | 3.6.0 | * | ------------ | -------------------- | ----- | --------- | * | Imgur | imgur.com | Yes | 3.9.0 | * | Meetup.com | meetup.com | Yes | 3.9.0 | * | Meetup.com | meetu.ps | Yes | 3.9.0 | * | ------------ | -------------------- | ----- | --------- | * | Animoto | animoto.com | Yes | 4.0.0 | * | Animoto | video214.com | Yes | 4.0.0 | * | CollegeHumor | collegehumor.com | Yes | 4.0.0 | * | Issuu | issuu.com | Yes | 4.0.0 | * | Mixcloud | mixcloud.com | Yes | 4.0.0 | * | Polldaddy | poll.fm | Yes | 4.0.0 | * | TED | ted.com | Yes | 4.0.0 | * | YouTube | youtube.com/playlist | Yes | 4.0.0 | * | ------------ | -------------------- | ----- | --------- | * * No longer supported providers: * * | ------------ | -------------------- | ----- | --------- | --------- | * | Provider | Flavor | SSL | Since | Removed | * | ------------ | -------------------- | ----- | --------- | --------- | * | Qik | qik.com | Yes | 2.9.0 | 3.9.0 | * | ------------ | -------------------- | ----- | --------- | --------- | * | Viddler | viddler.com | Yes | 2.9.0 | 4.0.0 | * | ------------ | -------------------- | ----- | --------- | --------- | * * @see wp_oembed_add_provider() * * @since 2.9.0 * * @param array $providers An array of popular oEmbed providers. */ $this->providers = apply_filters('oembed_providers', $providers); // Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop(). add_filter('oembed_dataparse', array($this, '_strip_newlines'), 10, 3); }
/** * Constructor * * @since 2.9.0 */ public function __construct() { $host = urlencode(home_url()); $providers = array('#http://((m|www)\\.)?youtube\\.com/watch.*#i' => array('http://www.youtube.com/oembed', true), '#https://((m|www)\\.)?youtube\\.com/watch.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), '#http://((m|www)\\.)?youtube\\.com/playlist.*#i' => array('http://www.youtube.com/oembed', true), '#https://((m|www)\\.)?youtube\\.com/playlist.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), '#http://youtu\\.be/.*#i' => array('http://www.youtube.com/oembed', true), '#https://youtu\\.be/.*#i' => array('http://www.youtube.com/oembed?scheme=https', true), '#https?://(.+\\.)?vimeo\\.com/.*#i' => array('http://vimeo.com/api/oembed.{format}', true), '#https?://(www\\.)?dailymotion\\.com/.*#i' => array('https://www.dailymotion.com/services/oembed', true), '#https?://dai.ly/.*#i' => array('https://www.dailymotion.com/services/oembed', true), '#https?://(www\\.)?flickr\\.com/.*#i' => array('https://www.flickr.com/services/oembed/', true), '#https?://flic\\.kr/.*#i' => array('https://www.flickr.com/services/oembed/', true), '#https?://(.+\\.)?smugmug\\.com/.*#i' => array('http://api.smugmug.com/services/oembed/', true), '#https?://(www\\.)?hulu\\.com/watch/.*#i' => array('http://www.hulu.com/api/oembed.{format}', true), 'http://i*.photobucket.com/albums/*' => array('http://api.photobucket.com/oembed', false), 'http://gi*.photobucket.com/groups/*' => array('http://api.photobucket.com/oembed', false), '#https?://(www\\.)?scribd\\.com/doc/.*#i' => array('http://www.scribd.com/services/oembed', true), '#https?://wordpress.tv/.*#i' => array('http://wordpress.tv/oembed/', true), '#https?://(.+\\.)?polldaddy\\.com/.*#i' => array('https://polldaddy.com/oembed/', true), '#https?://poll\\.fm/.*#i' => array('https://polldaddy.com/oembed/', true), '#https?://(www\\.)?funnyordie\\.com/videos/.*#i' => array('http://www.funnyordie.com/oembed', true), '#https?://(www\\.)?twitter\\.com/.+?/status(es)?/.*#i' => array('https://publish.twitter.com/oembed', true), '#https?://(www\\.)?twitter\\.com/.+?/timelines/.*#i' => array('https://publish.twitter.com/oembed', true), '#https?://(www\\.)?twitter\\.com/i/moments/.*#i' => array('https://publish.twitter.com/oembed', true), '#https?://vine.co/v/.*#i' => array('https://vine.co/oembed.{format}', true), '#https?://(www\\.)?soundcloud\\.com/.*#i' => array('http://soundcloud.com/oembed', true), '#https?://(.+?\\.)?slideshare\\.net/.*#i' => array('https://www.slideshare.net/api/oembed/2', true), '#https?://(www\\.)?instagr(\\.am|am\\.com)/p/.*#i' => array('https://api.instagram.com/oembed', true), '#https?://(open|play)\\.spotify\\.com/.*#i' => array('https://embed.spotify.com/oembed/', true), '#https?://(.+\\.)?imgur\\.com/.*#i' => array('http://api.imgur.com/oembed', true), '#https?://(www\\.)?meetu(\\.ps|p\\.com)/.*#i' => array('http://api.meetup.com/oembed', true), '#https?://(www\\.)?issuu\\.com/.+/docs/.+#i' => array('http://issuu.com/oembed_wp', true), '#https?://(www\\.)?collegehumor\\.com/video/.*#i' => array('http://www.collegehumor.com/oembed.{format}', true), '#https?://(www\\.)?mixcloud\\.com/.*#i' => array('http://www.mixcloud.com/oembed', true), '#https?://(www\\.|embed\\.)?ted\\.com/talks/.*#i' => array('http://www.ted.com/talks/oembed.{format}', true), '#https?://(www\\.)?(animoto|video214)\\.com/play/.*#i' => array('https://animoto.com/oembeds/create', true), '#https?://(.+)\\.tumblr\\.com/post/.*#i' => array('https://www.tumblr.com/oembed/1.0', true), '#https?://(www\\.)?kickstarter\\.com/projects/.*#i' => array('https://www.kickstarter.com/services/oembed', true), '#https?://kck\\.st/.*#i' => array('https://www.kickstarter.com/services/oembed', true), '#https?://cloudup\\.com/.*#i' => array('https://cloudup.com/oembed', true), '#https?://(www\\.)?reverbnation\\.com/.*#i' => array('https://www.reverbnation.com/oembed', true), '#https?://videopress.com/v/.*#' => array('https://public-api.wordpress.com/oembed/1.0/?for=' . $host, true), '#https?://(www\\.)?reddit\\.com/r/[^/]+/comments/.*#i' => array('https://www.reddit.com/oembed', true), '#https?://(www\\.)?speakerdeck\\.com/.*#i' => array('https://speakerdeck.com/oembed.{format}', true)); if (!empty(self::$early_providers['add'])) { foreach (self::$early_providers['add'] as $format => $data) { $providers[$format] = $data; } } if (!empty(self::$early_providers['remove'])) { foreach (self::$early_providers['remove'] as $format) { unset($providers[$format]); } } self::$early_providers = array(); /** * Filter the list of whitelisted oEmbed providers. * * Since WordPress 4.4, oEmbed discovery is enabled for all users and allows embedding of sanitized * iframes. The providers in this list are whitelisted, meaning they are trusted and allowed to * embed any content, such as iframes, videos, JavaScript, and arbitrary HTML. * * Supported providers: * * | Provider | Flavor | HTTPS | Since | * | ------------ | -------------------- | :---: | --------- | * | Dailymotion | dailymotion.com | Yes | 2.9.0 | * | Flickr | flickr.com | Yes | 2.9.0 | * | Hulu | hulu.com | Yes | 2.9.0 | * | Photobucket | photobucket.com | No | 2.9.0 | * | Scribd | scribd.com | Yes | 2.9.0 | * | Vimeo | vimeo.com | Yes | 2.9.0 | * | WordPress.tv | wordpress.tv | Yes | 2.9.0 | * | YouTube | youtube.com/watch | Yes | 2.9.0 | * | Funny or Die | funnyordie.com | Yes | 3.0.0 | * | Polldaddy | polldaddy.com | Yes | 3.0.0 | * | SmugMug | smugmug.com | Yes | 3.0.0 | * | YouTube | youtu.be | Yes | 3.0.0 | * | Twitter | twitter.com | Yes | 3.4.0 | * | Instagram | instagram.com | Yes | 3.5.0 | * | Instagram | instagr.am | Yes | 3.5.0 | * | Slideshare | slideshare.net | Yes | 3.5.0 | * | SoundCloud | soundcloud.com | Yes | 3.5.0 | * | Dailymotion | dai.ly | Yes | 3.6.0 | * | Flickr | flic.kr | Yes | 3.6.0 | * | Spotify | spotify.com | Yes | 3.6.0 | * | Imgur | imgur.com | Yes | 3.9.0 | * | Meetup.com | meetup.com | Yes | 3.9.0 | * | Meetup.com | meetu.ps | Yes | 3.9.0 | * | Animoto | animoto.com | Yes | 4.0.0 | * | Animoto | video214.com | Yes | 4.0.0 | * | CollegeHumor | collegehumor.com | Yes | 4.0.0 | * | Issuu | issuu.com | Yes | 4.0.0 | * | Mixcloud | mixcloud.com | Yes | 4.0.0 | * | Polldaddy | poll.fm | Yes | 4.0.0 | * | TED | ted.com | Yes | 4.0.0 | * | YouTube | youtube.com/playlist | Yes | 4.0.0 | * | Vine | vine.co | Yes | 4.1.0 | * | Tumblr | tumblr.com | Yes | 4.2.0 | * | Kickstarter | kickstarter.com | Yes | 4.2.0 | * | Kickstarter | kck.st | Yes | 4.2.0 | * | Cloudup | cloudup.com | Yes | 4.4.0 | * | ReverbNation | reverbnation.com | Yes | 4.4.0 | * | VideoPress | videopress.com | Yes | 4.4.0 | * | Reddit | reddit.com | Yes | 4.4.0 | * | Speaker Deck | speakerdeck.com | Yes | 4.4.0 | * * No longer supported providers: * * | Provider | Flavor | HTTPS | Since | Removed | * | ------------ | -------------------- | :---: | --------- | --------- | * | Qik | qik.com | Yes | 2.9.0 | 3.9.0 | * | Viddler | viddler.com | Yes | 2.9.0 | 4.0.0 | * | Revision3 | revision3.com | No | 2.9.0 | 4.2.0 | * | Blip | blip.tv | No | 2.9.0 | 4.4.0 | * | Rdio | rdio.com | Yes | 3.6.0 | 4.4.1 | * | Rdio | rd.io | Yes | 3.6.0 | 4.4.1 | * * @see wp_oembed_add_provider() * * @since 2.9.0 * * @param array $providers An array of popular oEmbed providers. */ $this->providers = apply_filters('oembed_providers', $providers); // Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop(). add_filter('oembed_dataparse', array($this, '_strip_newlines'), 10, 3); }
/** * Removes an oEmbed provider. * * @since 3.5.0 * * @see WP_oEmbed * * @param string $format The URL format for the oEmbed provider to remove. * @return bool Was the provider removed successfully? */ function wp_oembed_remove_provider($format) { if (did_action('plugins_loaded')) { $oembed = _wp_oembed_get_object(); if (isset($oembed->providers[$format])) { unset($oembed->providers[$format]); return true; } } else { WP_oEmbed::_remove_provider_early($format); } return false; }
function ale_get_embed_video($url) { require_once ABSPATH . WPINC . '/class-oembed.php'; $WP_oEmbed = new WP_oEmbed(); $provider = $WP_oEmbed->discover($url); $data = $WP_oEmbed->fetch($provider, $url); return $data; }
/** * Add Meta Keys for Fancybox Link & Embed for Video Posts */ function orbitnews_fancy_video($post_ID) { if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) { return; } if (get_post_status($post_ID) != 'publish') { return; } /* Delete Existing Metakeys */ delete_post_meta($post_ID, '_orn_oembed_body'); delete_post_meta($post_ID, '_orn_embed_link'); // Video Formats $video_link = trim(get_post_meta($post_ID, "orn_oembed_videos", true)); $video_format = has_post_format('video', $post_ID); // Video Type Embed if (!empty($video_link) && $video_format) { // Get Video Data with wordpress oembed class require_once ABSPATH . WPINC . '/class-oembed.php'; $oembed = new WP_oEmbed(); $provider = $oembed->discover($video_link); $data = $oembed->fetch($provider, $video_link); if (isset($data) && $data != false) { // Setup variables $provider = $data->provider_name; // Video Provider Name $html_embed = $data->html; // Video Embed html $thumb_link = $data->thumbnail_url; // Video Post Thumbnail preg_match('/<iframe.*src=\\"(.*)\\".*><\\/iframe>/isU', $html_embed, $url_embed); $url_embed = $url_embed[1]; // Embed Url $filename = sanitize_title($data->title); // Create filename from video title //Set meta key with feteched video embed html update_post_meta($post_ID, '_orn_oembed_body', $html_embed); //Video link and thumbnail for video posts switch ($provider) { case 'YouTube': $url_embed .= '&showinfo=0&iv_load_policy=3&modestbranding=0&nologo=1&vq=large&autoplay=1&ps=docs&wmode=opaque&rel=0'; break; case 'Vimeo': $thumb_link = str_replace('_295.jpg', '_640.jpg', $thumb_link); break; default: // do nothing; break; } //end switch // Add Meta key with embed link update_post_meta($post_ID, '_orn_embed_link', $url_embed); if (!has_post_thumbnail($post_ID)) { //Fetch and Store the Image $remote_file = wp_remote_get($thumb_link, array('sslverify' => false)); $file_type = wp_remote_retrieve_header($remote_file, 'content-type'); // Get image type $filename .= '-' . rawurldecode(basename($thumb_link)); // add image file name to file $local_file_url = wp_upload_bits($filename, '', $remote_file['body']); // save image in local server //Attachment options $attachment = array('post_title' => $filename, 'post_mime_type' => $file_type, 'post_content' => '', 'post_status' => 'inherit', 'ping_status' => 'closed'); // Add the image to your media library and set as featured image $attach_id = wp_insert_attachment($attachment, $local_file_url['file'], $post_ID); $attach_data = wp_generate_attachment_metadata($attach_id, $local_file_url['file']); wp_update_attachment_metadata($attach_id, $attach_data); set_post_thumbnail($post_ID, $attach_id); } // end !has_post_thumbnail() } //end isset( $data ) } //end $video_link empty }
function uncode_admin_get_oembed() { $code = $mime = ''; $width = 1; $height = 1; $urlEnterd = isset($_REQUEST['urlOembed']) ? urldecode($_REQUEST['urlOembed']) : die; $onlycode = isset($_REQUEST['onlycode']) ? $_REQUEST['onlycode'] : false; $urlEnterd = str_replace('https://instagram.com', 'http://instagram.com', $urlEnterd); $WP_oembed = new WP_oEmbed(); $raw_provider = parse_url($WP_oembed->get_provider($urlEnterd)); if (isset($raw_provider['host'])) { $host = $raw_provider['host']; $strip = array("www.", "api.", "embed."); $bare_host = str_replace($strip, "", $host); $bare_host = explode('.', $bare_host); $mime = 'oembed/' . $bare_host[0]; $code = wp_oembed_get($urlEnterd); preg_match_all('/(width|height)=("[^"]*")/i', $code, $img_attr); if (isset($img_attr[2][0])) { $width = preg_replace('/\\D/', '', $img_attr[2][0]); } if (isset($img_attr[2][1])) { $height = preg_replace('/\\D/', '', $img_attr[2][1]); } if ($bare_host[0] === 'youtube') { $parts = parse_url($urlEnterd); if (isset($parts['query'])) { parse_str($parts['query'], $query); $idvideo = $query['v']; } else { $idvideo = $parts['path']; $idvideo = str_replace('/', '', $idvideo); } $data = wp_remote_fopen("https://www.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails&id=" . $idvideo . "&key=AIzaSyA9PEtdNGSwzuM8QtaDbZvkcSlkh_UG2HI"); $json = json_decode($data); $code = '<img src="' . $json->items[0]->snippet->thumbnails->default->url . '" />'; } else { if ($bare_host[0] === 'vimeo') { $urlEnterd = preg_replace('/#.*/', '', $urlEnterd); $vimeo = unserialize(wp_remote_fopen("http://vimeo.com/api/v2/video/" . basename(strtok($urlEnterd, '?')) . ".php")); $code = '<img src="' . $vimeo[0]['thumbnail_large'] . '" />'; } else { if ($bare_host[0] === 'flickr') { $code = preg_replace('/<\\/?a[^>]*>/', '', $code); } } } } else { if (preg_match('/(\\.jpg|\\.jpeg|\\.png|\\.bmp)$/i', $urlEnterd) || preg_match('/(\\.jpg?|\\.jpeg?|\\.png?|\\.bmp?)/i', $urlEnterd) || strpos($urlEnterd, 'imgix') !== false) { $code = '<img src="' . $urlEnterd . '" />'; $mime = 'image/url'; if ($onlycode == 'false') { if ($getsize = @getimagesize($urlEnterd)) { if (isset($getsize[0])) { $width = $getsize[0]; } if (isset($getsize[1])) { $height = $getsize[1]; } } else { $width = 'indefinit'; $height = 'indefinit'; } } } else { if (strpos(strtolower($urlEnterd), '<iframe') !== false) { $mime = 'oembed/iframe'; preg_match_all('/(width|height)=("[^"]*")/i', $urlEnterd, $iframe_size); if (isset($iframe_size[2][0])) { preg_match("|\\d+|", $iframe_size[2][0], $width); $width = $width[0]; } if (isset($iframe_size[2][1])) { preg_match("|\\d+|", $iframe_size[2][1], $height); $height = $height[0]; } } else { if (strpos(strtolower($urlEnterd), '<svg') !== false) { $mime = 'oembed/svg'; preg_match_all('/(width|height)=("[^"]*")/i', $urlEnterd, $svg_size); if (isset($svg_size[2][0])) { preg_match("|\\d+|", $svg_size[2][0], $width); $width = $width[0]; } if (isset($svg_size[2][1])) { preg_match("|\\d+|", $svg_size[2][1], $height); $height = $height[0]; } } else { $mime = 'oembed/html'; } } $code = esc_html($urlEnterd); } } if ($code == '' && $urlEnterd != '') { $code = 'null'; } echo json_encode(array('code' => $code, 'mime' => $mime, 'width' => $width, 'height' => $height)); die; }
/** * Import a video thumbnail from an oEmbed endpoint into the media library. * * @todo Considering doing video URL comparison rather than oembed thumbnail * comparison? * * @since 1.8.0 * * @param int $post_id Video post ID. * @param string $url Video URL. */ function audiotheme_video_sideload_thumbnail($post_id, $url) { require_once ABSPATH . WPINC . '/class-oembed.php'; $oembed = new \WP_oEmbed(); $provider = $oembed->get_provider($url); if (!$provider || false === ($data = $oembed->fetch($provider, $url)) || !isset($data->thumbnail_url)) { return; } $current_thumb_id = get_post_thumbnail_id($post_id); $oembed_thumb_id = get_post_meta($post_id, '_audiotheme_oembed_thumbnail_id', true); $oembed_thumb_url = get_post_meta($post_id, '_audiotheme_oembed_thumbnail_url', true); // Re-use the existing oEmbed data instead of making another copy of the thumbnail. if ($data->thumbnail_url == $oembed_thumb_url && (!$current_thumb_id || $current_thumb_id != $oembed_thumb_id)) { set_post_thumbnail($post_id, $oembed_thumb_id); } elseif (!$current_thumb_id || $data->thumbnail_url != $oembed_thumb_url) { $attachment_id = audiotheme_video_sideload_image($data->thumbnail_url, $post_id); if (!empty($attachment_id) && !is_wp_error($attachment_id)) { set_post_thumbnail($post_id, $attachment_id); // Store the oEmbed thumb data so the same image isn't copied on repeated requests. update_post_meta($post_id, '_audiotheme_oembed_thumbnail_id', $attachment_id); update_post_meta($post_id, '_audiotheme_oembed_thumbnail_url', $data->thumbnail_url); } } }