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;
 }
Beispiel #3
0
 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;
}
Beispiel #5
0
/**
 * 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);
 }
Beispiel #8
0
/**
 * 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;
}
Beispiel #10
0
/**
 * 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 .= '&amp;showinfo=0&amp;iv_load_policy=3&amp;modestbranding=0&amp;nologo=1&amp;vq=large&amp;autoplay=1&amp;ps=docs&amp;wmode=opaque&amp;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;
}
Beispiel #12
0
/**
 * 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);
        }
    }
}