wp/wp-includes/class-oembed.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 5 5e2f62d02dcd
permissions -rw-r--r--
first import
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * API for fetching the HTML to embed remote content based on a provided URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * Used internally by the {@link WP_Embed} class, but is designed to be generic.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * @link http://codex.wordpress.org/oEmbed oEmbed Codex Article
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * @link http://oembed.com/ oEmbed Homepage
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * @subpackage oEmbed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 * oEmbed class.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @package WordPress
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 * @subpackage oEmbed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
class WP_oEmbed {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
	var $providers = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
	 * Constructor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
	 * @uses apply_filters() Filters a list of pre-defined oEmbed providers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
	function __construct() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		$providers = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
			'#https?://(www\.)?youtube\.com/watch.*#i'           => array( 'http://www.youtube.com/oembed',                     true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			'http://youtu.be/*'                                  => array( 'http://www.youtube.com/oembed',                     false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
			'http://blip.tv/*'                                   => array( 'http://blip.tv/oembed/',                            false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
			'#https?://(www\.)?vimeo\.com/.*#i'                  => array( 'http://vimeo.com/api/oembed.{format}',              true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
			'#https?://(www\.)?dailymotion\.com/.*#i'            => array( 'http://www.dailymotion.com/services/oembed',        true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			'http://dai.ly/*'                                    => array( 'http://www.dailymotion.com/services/oembed',        false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
			'#https?://(www\.)?flickr\.com/.*#i'                 => array( 'http://www.flickr.com/services/oembed/',            true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
			'http://flic.kr/*'                                   => array( 'http://www.flickr.com/services/oembed/',            false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			'#https?://(.+\.)?smugmug\.com/.*#i'                 => array( 'http://api.smugmug.com/services/oembed/',           true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			'#https?://(www\.)?hulu\.com/watch/.*#i'             => array( 'http://www.hulu.com/api/oembed.{format}',           true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
			'#https?://(www\.)?viddler\.com/.*#i'                => array( 'http://lab.viddler.com/services/oembed/',           true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			'http://qik.com/*'                                   => array( 'http://qik.com/api/oembed.{format}',                false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			'http://revision3.com/*'                             => array( 'http://revision3.com/api/oembed/',                  false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
			'http://i*.photobucket.com/albums/*'                 => array( 'http://photobucket.com/oembed',                     false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			'http://gi*.photobucket.com/groups/*'                => array( 'http://photobucket.com/oembed',                     false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
			'#https?://(www\.)?scribd\.com/.*#i'                 => array( 'http://www.scribd.com/services/oembed',             true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
			'http://wordpress.tv/*'                              => array( 'http://wordpress.tv/oembed/',                       false ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
			'#https?://(.+\.)?polldaddy\.com/.*#i'               => array( 'http://polldaddy.com/oembed/',                      true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
			'#https?://(www\.)?funnyordie\.com/videos/.*#i'      => array( 'http://www.funnyordie.com/oembed',                  true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
			'#https?://(www\.)?twitter\.com/.+?/status(es)?/.*#i'=> array( 'http://api.twitter.com/1/statuses/oembed.{format}', true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
 			'#https?://(www\.)?soundcloud\.com/.*#i'             => array( 'http://soundcloud.com/oembed',                      true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			'#https?://(www\.)?slideshare\.net/*#'               => array( 'http://www.slideshare.net/api/oembed/2',            true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			'#http://instagr(\.am|am\.com)/p/.*#i'               => array( 'http://api.instagram.com/oembed',                   true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			'#https?://(www\.)?rdio\.com/.*#i'                   => array( 'http://www.rdio.com/api/oembed/',                   true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			'#https?://rd\.io/x/.*#i'                            => array( 'http://www.rdio.com/api/oembed/',                   true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			'#https?://(open|play)\.spotify\.com/.*#i'           => array( 'https://embed.spotify.com/oembed/',                 true  ),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
		 * Filter the list of oEmbed providers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		 * Discovery is disabled for users lacking the unfiltered_html capability.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		 * Only providers in this array will be used for those users.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		 * @see wp_oembed_add_provider()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		 * @param array $providers An array of popular oEmbed providers.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		$this->providers = apply_filters( 'oembed_providers', $providers );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
		// Fix any embeds that contain new lines in the middle of the HTML which breaks wpautop().
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		add_filter( 'oembed_dataparse', array($this, '_strip_newlines'), 10, 3 );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
	 * The do-it-all function that takes a URL and attempts to return the HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
	 * @see WP_oEmbed::discover()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
	 * @see WP_oEmbed::fetch()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
	 * @see WP_oEmbed::data2html()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
	 * @param string $url The URL to the content that should be attempted to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
	 * @param array $args Optional arguments. Usually passed from a shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
	 * @return bool|string False on failure, otherwise the UNSANITIZED (and potentially unsafe) HTML that should be used to embed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
	function get_html( $url, $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		$provider = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
		if ( !isset($args['discover']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			$args['discover'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
		foreach ( $this->providers as $matchmask => $data ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			list( $providerurl, $regex ) = $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			// Turn the asterisk-type provider URLs into regex
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
			if ( !$regex ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
				$matchmask = '#' . str_replace( '___wildcard___', '(.+)', preg_quote( str_replace( '*', '___wildcard___', $matchmask ), '#' ) ) . '#i';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				$matchmask = preg_replace( '|^#http\\\://|', '#https?\://', $matchmask );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			if ( preg_match( $matchmask, $url ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				$provider = str_replace( '{format}', 'json', $providerurl ); // JSON is easier to deal with than XML
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		if ( !$provider && $args['discover'] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
			$provider = $this->discover( $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		if ( !$provider || false === $data = $this->fetch( $provider, $url, $args ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
		 * Filter the HTML returned by the oEmbed provider.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
		 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		 * @param string $data The returned oEmbed HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
		 * @param string $url  URL of the content to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
		 * @param array  $args Optional arguments, usually passed from a shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
		return apply_filters( 'oembed_result', $this->data2html( $data, $url ), $url, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
	 * Attempts to find oEmbed provider discovery <link> tags at the given URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	 * @param string $url The URL that should be inspected for discovery <link> tags.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
	 * @return bool|string False on failure, otherwise the oEmbed provider URL.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
	function discover( $url ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
		$providers = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		// Fetch URL content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
		if ( $html = wp_remote_retrieve_body( wp_safe_remote_get( $url ) ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
			/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			 * Filter the link types that contain oEmbed provider URLs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
			 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
			 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
			 * @param array $format Array of oEmbed link types. Accepts 'application/json+oembed',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
			 *                      'text/xml+oembed', and 'application/xml+oembed' (incorrect,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
			 *                      used by at least Vimeo).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			$linktypes = apply_filters( 'oembed_linktypes', array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
				'application/json+oembed' => 'json',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
				'text/xml+oembed' => 'xml',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
				'application/xml+oembed' => 'xml',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			// Strip <body>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			$html = substr( $html, 0, stripos( $html, '</head>' ) );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			// Do a quick check
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			$tagfound = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			foreach ( $linktypes as $linktype => $format ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				if ( stripos($html, $linktype) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
					$tagfound = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
			if ( $tagfound && preg_match_all( '/<link([^<>]+)>/i', $html, $links ) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
				foreach ( $links[1] as $link ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
					$atts = shortcode_parse_atts( $link );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
					if ( !empty($atts['type']) && !empty($linktypes[$atts['type']]) && !empty($atts['href']) ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
						$providers[$linktypes[$atts['type']]] = $atts['href'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
						// Stop here if it's JSON (that's all we need)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
						if ( 'json' == $linktypes[$atts['type']] )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
		// JSON is preferred to XML
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		if ( !empty($providers['json']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			return $providers['json'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
		elseif ( !empty($providers['xml']) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			return $providers['xml'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
		else
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	 * Connects to a oEmbed provider and returns the result.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
	 * @param string $provider The URL to the oEmbed provider.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
	 * @param string $url The URL to the content that is desired to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
	 * @param array $args Optional arguments. Usually passed from a shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
	 * @return bool|object False on failure, otherwise the result in the form of an object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
	function fetch( $provider, $url, $args = '' ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
		$args = wp_parse_args( $args, wp_embed_defaults() );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
		$provider = add_query_arg( 'maxwidth', (int) $args['width'], $provider );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		$provider = add_query_arg( 'maxheight', (int) $args['height'], $provider );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
		$provider = add_query_arg( 'url', urlencode($url), $provider );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		 * Filter the oEmbed URL to be fetched.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		 * @param string $provider URL of the oEmbed provider.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
		 * @param string $url      URL of the content to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		 * @param array  $args     Optional arguments, usually passed from a shortcode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
		$provider = apply_filters( 'oembed_fetch_url', $provider, $url, $args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		foreach( array( 'json', 'xml' ) as $format ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
			$result = $this->_fetch_with_format( $provider, $format );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
			if ( is_wp_error( $result ) && 'not-implemented' == $result->get_error_code() )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
				continue;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
			return ( $result && ! is_wp_error( $result ) ) ? $result : false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
	 * Fetches result from an oEmbed provider for a specific format and complete provider URL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
	 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
	 * @param string $provider_url_with_args URL to the provider with full arguments list (url, maxheight, etc.)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	 * @param string $format Format to use
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
	 * @return bool|object False on failure, otherwise the result in the form of an object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
	function _fetch_with_format( $provider_url_with_args, $format ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
		$provider_url_with_args = add_query_arg( 'format', $format, $provider_url_with_args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
		$response = wp_safe_remote_get( $provider_url_with_args );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
		if ( 501 == wp_remote_retrieve_response_code( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			return new WP_Error( 'not-implemented' );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		if ( ! $body = wp_remote_retrieve_body( $response ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		$parse_method = "_parse_$format";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
		return $this->$parse_method( $body );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
	 * Parses a json response body.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
	 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
	function _parse_json( $response_body ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
		return ( ( $data = json_decode( trim( $response_body ) ) ) && is_object( $data ) ) ? $data : false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
	 * Parses an XML response body.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
	 * @since 3.0.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
	function _parse_xml( $response_body ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		if ( ! function_exists( 'libxml_disable_entity_loader' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		$loader = libxml_disable_entity_loader( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		$errors = libxml_use_internal_errors( true );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
		$return = $this->_parse_xml_body( $response_body );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		libxml_use_internal_errors( $errors );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
		libxml_disable_entity_loader( $loader );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
	 * Helper function for parsing an XML response body.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
	 * @since 3.6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
	private function _parse_xml_body( $response_body ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
		if ( ! function_exists( 'simplexml_import_dom' ) || ! class_exists( 'DOMDocument' ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
		$dom = new DOMDocument;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
		$success = $dom->loadXML( $response_body );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
		if ( ! $success )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
		if ( isset( $dom->doctype ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		foreach ( $dom->childNodes as $child ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			if ( XML_DOCUMENT_TYPE_NODE === $child->nodeType )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		$xml = simplexml_import_dom( $dom );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
		if ( ! $xml )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
		$return = new stdClass;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
		foreach ( $xml as $key => $value ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
			$return->$key = (string) $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
		return $return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
	 * Converts a data object from {@link WP_oEmbed::fetch()} and returns the HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
	 * @param object $data A data object result from an oEmbed provider.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
	 * @param string $url The URL to the content that is desired to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
	 * @return bool|string False on error, otherwise the HTML needed to embed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
	function data2html( $data, $url ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
		if ( ! is_object( $data ) || empty( $data->type ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
		$return = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
		switch ( $data->type ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
			case 'photo':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
				if ( empty( $data->url ) || empty( $data->width ) || empty( $data->height ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
				if ( ! is_string( $data->url ) || ! is_numeric( $data->width ) || ! is_numeric( $data->height ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
				$title = ! empty( $data->title ) && is_string( $data->title ) ? $data->title : '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				$return = '<a href="' . esc_url( $url ) . '"><img src="' . esc_url( $data->url ) . '" alt="' . esc_attr($title) . '" width="' . esc_attr($data->width) . '" height="' . esc_attr($data->height) . '" /></a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
			case 'video':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
			case 'rich':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
				if ( ! empty( $data->html ) && is_string( $data->html ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
					$return = $data->html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
			case 'link':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
				if ( ! empty( $data->title ) && is_string( $data->title ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
					$return = '<a href="' . esc_url( $url ) . '">' . esc_html( $data->title ) . '</a>';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
				$return = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
		/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
		 * Filter the returned oEmbed HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
		 * Use this filter to add support for custom data types, or to filter the result.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
		 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
		 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		 * @param string $return The returned oEmbed HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
		 * @param object $data   A data object result from an oEmbed provider.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
		 * @param string $url    The URL of the content to be embedded.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
		 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
		return apply_filters( 'oembed_dataparse', $return, $data, $url );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
	/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
	 * Strip any new lines from the HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
	 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
	 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
	 * @param string $html Existing HTML.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
	 * @param object $data Data object from WP_oEmbed::data2html()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
	 * @param string $url The original URL passed to oEmbed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
	 * @return string Possibly modified $html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
	 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
	function _strip_newlines( $html, $data, $url ) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
		if ( false !== strpos( $html, "\n" ) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			$html = str_replace( array( "\r\n", "\n" ), '', $html );
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
		return $html;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
 * Returns the initialized {@link WP_oEmbed} object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
 * @since 2.9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
 * @see WP_oEmbed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
 * @uses WP_oEmbed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
 * @return WP_oEmbed object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
function _wp_oembed_get_object() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
	static $wp_oembed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
	if ( is_null($wp_oembed) )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
		$wp_oembed = new WP_oEmbed();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
	return $wp_oembed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
}