WordPress.org

Make WordPress Core

Ticket #34115: 34115.patch

File 34115.patch, 6.8 KB (added by dannydehaan, 4 years ago)

Work in Progress Patch file

  • wp-includes/class-wp-embed.php

    From 21f1342bc78c4346c058e2ec67fef6a73b0192e1 Mon Sep 17 00:00:00 2001
    From: Danny de Haan <d.dehaan@haboes.nl>
    Date: Thu, 1 Oct 2015 22:54:15 +0200
    Subject: [PATCH] Added filters for term and author descriptions
    
    ---
     wp-includes/class-wp-embed.php | 131 +++++++++++++++++++----------------------
     1 file changed, 60 insertions(+), 71 deletions(-)
    
    diff --git a/wp-includes/class-wp-embed.php b/wp-includes/class-wp-embed.php
    index d4b1ded..38ba47b 100644
    a b class WP_Embed { 
    2727                // Hack to get the [embed] shortcode to run before wpautop()
    2828                add_filter( 'the_content', array( $this, 'run_shortcode' ), 8 );
    2929
     30                add_filter( 'term_description', array( $this, 'autoembed' ), 8 );
     31
     32                add_filter( 'get_the_author_description', array( $this, 'autoembed' ), 8 );
     33
    3034                // Shortcode placeholder for strip_shortcodes()
    3135                add_shortcode( 'embed', '__return_false' );
    3236
    class WP_Embed { 
    3539
    3640                // After a post is saved, cache oEmbed items via AJAX
    3741                add_action( 'edit_form_advanced', array( $this, 'maybe_run_ajax_cache' ) );
    38                 add_action( 'edit_page_form', array( $this, 'maybe_run_ajax_cache' ) );
    3942        }
    4043
    4144        /**
    class WP_Embed { 
    132135        public function shortcode( $attr, $url = '' ) {
    133136                $post = get_post();
    134137
     138                if ( null !== $post ) {
     139                        $post_ID = $post->ID;
     140                }
     141
    135142                if ( empty( $url ) && ! empty( $attr['src'] ) ) {
    136143                        $url = $attr['src'];
    137144                }
    class WP_Embed { 
    174181                        }
    175182                }
    176183
    177                 $post_ID = ( ! empty( $post->ID ) ) ? $post->ID : null;
    178                 if ( ! empty( $this->post_ID ) ) // Potentially set by WP_Embed::cache_oembed()
    179                         $post_ID = $this->post_ID;
    180 
    181                 // Unknown URL format. Let oEmbed have a go.
    182                 if ( $post_ID ) {
    183 
    184                         // Check for a cached result (stored in the post meta)
    185                         $key_suffix = md5( $url . serialize( $attr ) );
    186                         $cachekey = '_oembed_' . $key_suffix;
    187                         $cachekey_time = '_oembed_time_' . $key_suffix;
    188 
    189                         /**
    190                          * Filter the oEmbed TTL value (time to live).
    191                          *
    192                          * @since 4.0.0
    193                          *
    194                          * @param int    $time    Time to live (in seconds).
    195                          * @param string $url     The attempted embed URL.
    196                          * @param array  $attr    An array of shortcode attributes.
    197                          * @param int    $post_ID Post ID.
    198                          */
    199                         $ttl = apply_filters( 'oembed_ttl', DAY_IN_SECONDS, $url, $attr, $post_ID );
    200 
    201                         $cache = get_post_meta( $post_ID, $cachekey, true );
    202                         $cache_time = get_post_meta( $post_ID, $cachekey_time, true );
    203 
    204                         if ( ! $cache_time ) {
    205                                 $cache_time = 0;
    206                         }
    207 
    208                         $cached_recently = ( time() - $cache_time ) < $ttl;
    209 
    210                         if ( $this->usecache || $cached_recently ) {
    211                                 // Failures are cached. Serve one if we're using the cache.
    212                                 if ( '{{unknown}}' === $cache )
    213                                         return $this->maybe_make_link( $url );
    214 
    215                                 if ( ! empty( $cache ) ) {
    216                                         /**
    217                                          * Filter the cached oEmbed HTML.
    218                                          *
    219                                          * @since 2.9.0
    220                                          *
    221                                          * @see WP_Embed::shortcode()
    222                                          *
    223                                          * @param mixed  $cache   The cached HTML result, stored in post meta.
    224                                          * @param string $url     The attempted embed URL.
    225                                          * @param array  $attr    An array of shortcode attributes.
    226                                          * @param int    $post_ID Post ID.
    227                                          */
    228                                         return apply_filters( 'embed_oembed_html', $cache, $url, $attr, $post_ID );
    229                                 }
    230                         }
     184                // Check for a cached result (stored in the post meta)
     185                $cachekey = '_oembed_' . md5( $url . serialize( $attr ) );
    231186
     187                if ( false === ( $cache = get_transient( $cachekey ) ) ) {
    232188                        /**
    233189                         * Filter whether to inspect the given URL for discoverable link tags.
    234190                         *
    class WP_Embed { 
    238194                         *
    239195                         * @param bool $enable Whether to enable `<link>` tag discovery. Default false.
    240196                         */
    241                         $attr['discover'] = ( apply_filters( 'embed_oembed_discover', false ) && author_can( $post_ID, 'unfiltered_html' ) );
     197                        $attr['discover'] = ( apply_filters( 'embed_oembed_discover', false ) && author_can( ( isset( $post_ID ) ? $post_ID : 0 ), 'unfiltered_html' ) );
    242198
    243199                        // Use oEmbed to get the HTML
    244                         $html = wp_oembed_get( $url, $attr );
    245 
    246                         // Maybe cache the result
    247                         if ( $html ) {
    248                                 update_post_meta( $post_ID, $cachekey, $html );
    249                                 update_post_meta( $post_ID, $cachekey_time, time() );
    250                         } elseif ( ! $cache ) {
    251                                 update_post_meta( $post_ID, $cachekey, '{{unknown}}' );
    252                         }
     200                        $cache = wp_oembed_get( $url, $attr );
     201                }
    253202
    254                         // If there was a result, return it
    255                         if ( $html ) {
    256                                 /** This filter is documented in wp-includes/class-wp-embed.php */
    257                                 return apply_filters( 'embed_oembed_html', $html, $url, $attr, $post_ID );
     203                if ( $this->usecache || false !== $cache ) {
     204                        // Failures are cached. Serve one if we're using the cache.
     205                        if ( '{{unknown}}' === $cache )
     206                                return $this->maybe_make_link( $url );
     207
     208                        if ( ! empty( $cache ) ) {
     209                                /**
     210                                 * Filter the oEmbed TTL value (time to live).
     211                                 *
     212                                 * @since 4.0.0
     213                                 *
     214                                 * @param int    $time    Time to live (in seconds).
     215                                 * @param string $url     The attempted embed URL.
     216                                 * @param array  $attr    An array of shortcode attributes.
     217                                 * @param int    $post_ID Post ID when set, otherwise 0.
     218                                 */
     219                                $ttl = apply_filters( 'oembed_ttl', DAY_IN_SECONDS, $url, $attr, ( isset( $post_ID ) ? $post_ID : 0 ) );
     220
     221                                /**
     222                                 * Set the oEmbed cache with the generated html
     223                                 *
     224                                 * @since 4.4
     225                                 *
     226                                 * @param string $cachekey  The generated cachekey based on $url and $atts
     227                                 * @param string $cache     The generated oEmbed HTML
     228                                 * @param int    $ttl       The time to live for the transient
     229                                 */
     230                                set_transient( $cachekey, $cache, $ttl );
     231
     232                                /**
     233                                 * Filter the cached oEmbed HTML.
     234                                 *
     235                                 * @since 2.9.0
     236                                 *
     237                                 * @see WP_Embed::shortcode()
     238                                 *
     239                                 * @param mixed  $cache   The cached HTML result, stored in post meta.
     240                                 * @param string $url     The attempted embed URL.
     241                                 * @param array  $attr    An array of shortcode attributes.
     242                                 * @param int    $post_ID Post ID.
     243                                 */
     244                                return apply_filters( 'embed_oembed_html', $cache, $url, $attr, ( isset( $post_ID ) ? $post_ID : 0 ) );
    258245                        }
     246                } else {
     247                        set_transient( $cachekey, '{{unknown}}', $ttl );
    259248                }
    260249
    261250                // Still unknown
    class WP_Embed { 
    272261                if ( empty($post_metas) )
    273262                        return;
    274263
    275                 foreach ( $post_metas as $post_meta_key ) {
     264                foreach( $post_metas as $post_meta_key ) {
    276265                        if ( '_oembed_' == substr( $post_meta_key, 0, 8 ) )
    277266                                delete_post_meta( $post_ID, $post_meta_key );
    278267                }
    class WP_Embed { 
    321310        public function autoembed( $content ) {
    322311                // Replace line breaks from all HTML elements with placeholders.
    323312                $content = wp_replace_in_html_tags( $content, array( "\n" => '<!-- wp-line-break -->' ) );
    324 
     313               
    325314                // Find URLs that are on their own line.
    326315                $content = preg_replace_callback( '|^(\s*)(https?://[^\s"]+)(\s*)$|im', array( $this, 'autoembed_callback' ), $content );
    327316