--- a/wp/wp-includes/class-wp-oembed.php Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/class-wp-oembed.php Fri Sep 05 18:40:08 2025 +0200
@@ -4,7 +4,7 @@
*
* Used internally by the WP_Embed class, but is designed to be generic.
*
- * @link https://wordpress.org/support/article/embeds/
+ * @link https://developer.wordpress.org/advanced-administration/wordpress/oembed/
* @link http://oembed.com/
*
* @package WordPress
@@ -16,6 +16,7 @@
*
* @since 2.9.0
*/
+#[AllowDynamicProperties]
class WP_oEmbed {
/**
@@ -53,6 +54,7 @@
'#https?://((m|www)\.)?youtube\.com/watch.*#i' => array( 'https://www.youtube.com/oembed', true ),
'#https?://((m|www)\.)?youtube\.com/playlist.*#i' => array( 'https://www.youtube.com/oembed', true ),
'#https?://((m|www)\.)?youtube\.com/shorts/*#i' => array( 'https://www.youtube.com/oembed', true ),
+ '#https?://((m|www)\.)?youtube\.com/live/*#i' => array( 'https://www.youtube.com/oembed', true ),
'#https?://youtu\.be/.*#i' => array( 'https://www.youtube.com/oembed', true ),
'#https?://(.+\.)?vimeo\.com/.*#i' => array( 'https://vimeo.com/api/oembed.{format}', true ),
'#https?://(www\.)?dailymotion\.com/.*#i' => array( 'https://www.dailymotion.com/services/oembed', true ),
@@ -62,6 +64,7 @@
'#https?://(.+\.)?smugmug\.com/.*#i' => array( 'https://api.smugmug.com/services/oembed/', true ),
'#https?://(www\.)?scribd\.com/(doc|document)/.*#i' => array( 'https://www.scribd.com/services/oembed', true ),
'#https?://wordpress\.tv/.*#i' => array( 'https://wordpress.tv/oembed/', true ),
+ '#https?://(.+\.)?crowdsignal\.net/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ),
'#https?://(.+\.)?polldaddy\.com/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ),
'#https?://poll\.fm/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ),
'#https?://(.+\.)?survey\.fm/.*#i' => array( 'https://api.crowdsignal.com/oembed', true ),
@@ -72,14 +75,13 @@
'#https?://(www\.)?twitter\.com/\w{1,15}/timelines/.*#i' => array( 'https://publish.twitter.com/oembed', true ),
'#https?://(www\.)?twitter\.com/i/moments/.*#i' => array( 'https://publish.twitter.com/oembed', true ),
'#https?://(www\.)?soundcloud\.com/.*#i' => array( 'https://soundcloud.com/oembed', true ),
- '#https?://(.+?\.)?slideshare\.net/.*#i' => array( 'https://www.slideshare.net/api/oembed/2', true ),
'#https?://(open|play)\.spotify\.com/.*#i' => array( 'https://embed.spotify.com/oembed/', true ),
'#https?://(.+\.)?imgur\.com/.*#i' => array( 'https://api.imgur.com/oembed', true ),
'#https?://(www\.)?issuu\.com/.+/docs/.+#i' => array( 'https://issuu.com/oembed_wp', true ),
- '#https?://(www\.)?mixcloud\.com/.*#i' => array( 'https://www.mixcloud.com/oembed', true ),
+ '#https?://(www\.)?mixcloud\.com/.*#i' => array( 'https://app.mixcloud.com/oembed/', true ),
'#https?://(www\.|embed\.)?ted\.com/talks/.*#i' => array( 'https://www.ted.com/services/v1/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?://(.+)\.tumblr\.com/.*#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 ),
@@ -102,8 +104,12 @@
'#https?://www\.someecards\.com/usercards/viewcard/.+#i' => array( 'https://www.someecards.com/v2/oembed/', true ),
'#https?://some\.ly\/.+#i' => array( 'https://www.someecards.com/v2/oembed/', true ),
'#https?://(www\.)?tiktok\.com/.*/video/.*#i' => array( 'https://www.tiktok.com/oembed', true ),
+ '#https?://(www\.)?tiktok\.com/@.*#i' => array( 'https://www.tiktok.com/oembed', true ),
'#https?://([a-z]{2}|www)\.pinterest\.com(\.(au|mx))?/.*#i' => array( 'https://www.pinterest.com/oembed.json', true ),
'#https?://(www\.)?wolframcloud\.com/obj/.+#i' => array( 'https://www.wolframcloud.com/oembed', true ),
+ '#https?://pca\.st/.+#i' => array( 'https://pca.st/oembed.json', true ),
+ '#https?://((play|www)\.)?anghami\.com/.*#i' => array( 'https://api.anghami.com/rest/v1/oembed.view', true ),
+ '#https?://bsky.app/profile/.*/post/.*#i' => array( 'https://embed.bsky.app/oembed', true ),
);
if ( ! empty( self::$early_providers['add'] ) ) {
@@ -141,7 +147,6 @@
* | SmugMug | smugmug.com | 3.0.0 |
* | YouTube | youtu.be | 3.0.0 |
* | Twitter | twitter.com | 3.4.0 |
- * | Slideshare | slideshare.net | 3.5.0 |
* | SoundCloud | soundcloud.com | 3.5.0 |
* | Dailymotion | dai.ly | 3.6.0 |
* | Flickr | flic.kr | 3.6.0 |
@@ -181,6 +186,10 @@
* | TikTok | tiktok.com | 5.4.0 |
* | Pinterest | pinterest.com | 5.9.0 |
* | WolframCloud | wolframcloud.com | 5.9.0 |
+ * | Pocket Casts | pocketcasts.com | 6.1.0 |
+ * | Crowdsignal | crowdsignal.net | 6.2.0 |
+ * | Anghami | anghami.com | 6.3.0 |
+ * | Bluesky | bsky.app | 6.6.0 |
*
* No longer supported providers:
*
@@ -204,6 +213,7 @@
* | Facebook | facebook.com | 4.7.0 | 5.5.2 |
* | Meetup.com | meetup.com | 3.9.0 | 6.0.1 |
* | Meetup.com | meetu.ps | 3.9.0 | 6.0.1 |
+ * | SlideShare | slideshare.net | 3.5.0 | 6.6.0 |
*
* @see wp_oembed_add_provider()
*
@@ -230,6 +240,7 @@
if ( in_array( $name, $this->compat_methods, true ) ) {
return $this->$name( ...$arguments );
}
+
return false;
}
@@ -508,7 +519,7 @@
}
/**
- * Connects to a oEmbed provider and returns the result.
+ * Connects to an oEmbed provider and returns the result.
*
* @since 2.9.0
*
@@ -544,8 +555,10 @@
if ( is_wp_error( $result ) && 'not-implemented' === $result->get_error_code() ) {
continue;
}
+
return ( $result && ! is_wp_error( $result ) ) ? $result : false;
}
+
return false;
}
@@ -565,14 +578,18 @@
$args = apply_filters( 'oembed_remote_get_args', array(), $provider_url_with_args );
$response = wp_safe_remote_get( $provider_url_with_args, $args );
- if ( 501 == wp_remote_retrieve_response_code( $response ) ) {
+
+ if ( 501 === wp_remote_retrieve_response_code( $response ) ) {
return new WP_Error( 'not-implemented' );
}
+
$body = wp_remote_retrieve_body( $response );
if ( ! $body ) {
return false;
}
+
$parse_method = "_parse_$format";
+
return $this->$parse_method( $body );
}
@@ -586,6 +603,7 @@
*/
private function _parse_json( $response_body ) {
$data = json_decode( trim( $response_body ) );
+
return ( $data && is_object( $data ) ) ? $data : false;
}
@@ -603,9 +621,10 @@
}
if ( PHP_VERSION_ID < 80000 ) {
- // This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading
- // is disabled by default, so this function is no longer needed to protect against XXE attacks.
- // phpcs:ignore PHPCompatibility.FunctionUse.RemovedFunctions.libxml_disable_entity_loaderDeprecated
+ /*
+ * This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading
+ * is disabled by default, so this function is no longer needed to protect against XXE attacks.
+ */
$loader = libxml_disable_entity_loader( true );
}
@@ -636,7 +655,7 @@
return false;
}
- $dom = new DOMDocument;
+ $dom = new DOMDocument();
$success = $dom->loadXML( $response_body );
if ( ! $success ) {
return false;
@@ -657,7 +676,7 @@
return false;
}
- $return = new stdClass;
+ $return = new stdClass();
foreach ( $xml as $key => $value ) {
$return->$key = (string) $value;
}
@@ -737,7 +756,7 @@
* @return string Possibly modified $html
*/
public function _strip_newlines( $html, $data, $url ) {
- if ( false === strpos( $html, "\n" ) ) {
+ if ( ! str_contains( $html, "\n" ) ) {
return $html;
}