WordPress.org

Make WordPress Core

Ticket #23570: 23570.2.diff

File 23570.2.diff, 3.5 KB (added by wonderboymusic, 14 months ago)
  • wp-includes/post-formats.php

    diff --git wp-includes/post-formats.php wp-includes/post-formats.php
    index 828447b..2b3b858 100644
    function post_formats_compat( $content, $id = 0 ) { 
    312312        switch ( $format ) { 
    313313                case 'link': 
    314314                        $compat['tag'] = ''; 
     315                        $compat['position'] = 'before'; 
    315316 
    316317                        if ( ! empty( $meta['url'] ) ) { 
    317318                                $esc_url = preg_quote( $meta['url'], '#' ); 
    318319                                // Make sure the same URL isn't in the post (modified/extended versions allowed) 
    319                                 if ( ! preg_match( '#' . $esc_url . '[^/&\?]#', $content ) ) { 
    320                                         $format_output .= sprintf( 
    321                                                 '<a %shref="%s">%s</a>', 
    322                                                 empty( $compat['link_class'] ) ? '' : sprintf( 'class="%s" ', esc_attr( $compat['link_class'] ) ), 
    323                                                 esc_url( $meta['url'] ), 
    324                                                 empty( $post->post_title ) ? esc_url( $meta['url'] ) : apply_filters( 'the_title', $post->post_title ) 
    325                                         ); 
     320                                if ( ! preg_match( '#' . $esc_url . '[^/&\?]?#', $content ) ) { 
     321                                        $url = $meta['url']; 
     322                                } else { 
     323                                        $url = get_content_link( $content, true ); 
    326324                                } 
     325                        } else { 
     326                                $content_before = $content; 
     327                                $url = get_content_link( $content, true ); 
     328                                if ( $content_before == $content ) 
     329                                        $url = ''; 
    327330                        } 
     331 
     332                        if ( ! empty( $url ) ) { 
     333                                $format_output .= sprintf( 
     334                                        '<a %shref="%s">%s</a>', 
     335                                        empty( $compat['link_class'] ) ? '' : sprintf( 'class="%s" ', esc_attr( $compat['link_class'] ) ), 
     336                                        esc_url( $url ), 
     337                                        empty( $post->post_title ) ? esc_url( $meta['url'] ) : apply_filters( 'the_title', $post->post_title ) 
     338                                ); 
     339                        } 
    328340                        break; 
    329341 
    330342                case 'quote': 
    function post_formats_compat( $content, $id = 0 ) { 
    420432 
    421433        return $output; 
    422434} 
     435 
     436/** 
     437 * Extract a URL from passed content, if possible 
     438 * Checks for a URL on the first line of the content or the first encountered href attribute. 
     439 * 
     440 * @since 3.6.0 
     441 * 
     442 * @param string $content A string which might contain a URL. 
     443 * @param boolean $remove Whether the remove the found URL from the passed content. 
     444 * @return string The found URL. 
     445 */ 
     446function get_content_link( &$content, $remove = false ) { 
     447        if ( empty( $content ) ) 
     448                return; 
     449 
     450        $matches = array(); 
     451 
     452        // the content is a URL 
     453        $trimmed = trim( $content ); 
     454        if ( 0 === stripos( $trimmed, 'http' ) && ! preg_match( '#\s#', $trimmed ) ) { 
     455                if ( $remove ) 
     456                        $content = ''; 
     457 
     458                return $trimmed; 
     459        // the content is HTML so we grab the first href 
     460        } elseif ( preg_match( '/<a\s[^>]*?href=[\'"](.?)[\'"]/is', $content, $matches ) ) { 
     461                return esc_url_raw( $matches[1] ); 
     462        } 
     463 
     464        $lines = explode( "\n", $trimmed ); 
     465        $line = trim( array_shift( $lines ) ); 
     466 
     467        // the content is a URL followed by content 
     468        if ( 0 === stripos( $line, 'http' ) ) { 
     469                if ( $remove ) 
     470                        $content = trim( join( "\n", $lines ) ); 
     471 
     472                return esc_url_raw( $line ); 
     473        } 
     474} 
     475 
     476/** 
     477 * Attempt to retrieve a URL from a post's content 
     478 * 
     479 * @since 3.6.0 
     480 * 
     481 * @param int $id Optional. Post ID. 
     482 * @return string A URL, if found. 
     483 */ 
     484function get_the_link( $id = 0 ) { 
     485        $post = empty( $id ) ? get_post() : get_post( $id ); 
     486        if ( empty( $post ) ) 
     487                return; 
     488 
     489        if ( has_post_format( 'link', $post ) ) { 
     490                $meta = get_post_format_meta( $post->ID ); 
     491                if ( ! empty( $meta['url'] ) ) 
     492                        return esc_url_raw( $meta['url'] ); 
     493        } 
     494 
     495        if ( ! empty( $post->post_content ) ) 
     496                return get_content_link( $post->post_content ); 
     497} 
     498 
     499/** 
     500 * Attempt to output a URL from a post's content 
     501 * 
     502 * @since 3.6.0 
     503 *. 
     504 */ 
     505function the_link() { 
     506        echo get_the_link(); 
     507} 
     508 No newline at end of file