WordPress.org

Make WordPress Core

Ticket #24134: 24134.4.diff

File 24134.4.diff, 7.8 KB (added by markjaquith, 7 years ago)

fix a preload oversight for audio.

  • wp-includes/media.php

    diff --git wp-includes/media.php wp-includes/media.php
    index 9b5d6a8..f5c0d68 100644
    function wp_get_audio_extensions() { 
    839839/**
    840840 * The Audio shortcode.
    841841 *
    842842 * This implements the functionality of the Audio Shortcode for displaying
    843843 * WordPress mp3s in a post.
    844844 *
    845845 * @since 3.6.0
    846846 *
    847847 * @param array $attr Attributes of the shortcode.
    848848 * @return string HTML content to display audio.
    849849 */
    850850function wp_audio_shortcode( $attr ) {
    851851        $post_id = get_post() ? get_the_ID() : 0;
    852852
    853853        static $instances = 0;
    854854        $instances++;
    855855
    856856        $audio = null;
    857857
    858858        $default_types = wp_get_audio_extensions();
    859         $defaults_atts = array( 'src' => '' );
     859        $defaults_atts = array(
     860                'src'      => '',
     861                'loop'     => '',
     862                'autoplay' => '',
     863                'preload' => 'none'
     864        );
    860865        foreach ( $default_types as $type )
    861866                $defaults_atts[$type] = '';
    862867
    863868        $atts = shortcode_atts( $defaults_atts, $attr, 'audio' );
    864869        extract( $atts );
    865870
    866871        $primary = false;
    867872        if ( ! empty( $src ) ) {
    868873                $type = wp_check_filetype( $src );
    869874                if ( ! in_array( $type['ext'], $default_types ) )
    870875                        return sprintf( '<a class="wp-post-format-link-audio" href="%s">%s</a>', esc_url( $src ), esc_html( $src ) );
    871876                $primary = true;
    872877                array_unshift( $default_types, 'src' );
    873878        } else {
    874879                foreach ( $default_types as $ext ) {
    875880                        if ( ! empty( $$ext ) ) {
    876881                                $type = wp_check_filetype( $$ext );
    877882                                if ( $type['ext'] === $ext )
    878883                                        $primary = true;
    879884                        }
    function wp_audio_shortcode( $attr ) { 
    883888        if ( ! $primary ) {
    884889                $audios = get_attached_media( 'audio', $post_id );
    885890                if ( empty( $audios ) )
    886891                        return;
    887892
    888893                $audio = reset( $audios );
    889894                $src = wp_get_attachment_url( $audio->ID );
    890895                if ( empty( $src ) )
    891896                        return;
    892897
    893898                array_unshift( $default_types, 'src' );
    894899        }
    895900
    896901        $library = apply_filters( 'wp_audio_shortcode_library', 'mediaelement' );
    897902        if ( 'mediaelement' === $library && did_action( 'init' ) ) {
    898903                wp_enqueue_style( 'wp-mediaelement' );
    899904                wp_enqueue_script( 'wp-mediaelement' );
    900905        }
    901906
    902907        $atts = array(
    903                 sprintf( 'class="%s"', apply_filters( 'wp_audio_shortcode_class', 'wp-audio-shortcode' ) ),
    904                 sprintf( 'id="audio-%d-%d"', $post_id, $instances ),
     908                'class'    => apply_filters( 'wp_audio_shortcode_class', 'wp-audio-shortcode' ),
     909                'id'       => sprintf( 'audio-%d-%d', $post_id, $instances ),
     910                'loop'     => $loop,
     911                'autoplay' => $autoplay,
     912                'preload'  => $preload,
    905913        );
    906914
    907         $html = sprintf( '<audio %s controls="controls" preload="none">', join( ' ', $atts ) );
     915        // These ones should just be omitted altogether if they are blank
     916        foreach ( array( 'loop', 'autoplay', 'preload' ) as $a ) {
     917                if ( empty( $atts[$a] ) )
     918                        unset( $atts[$a] );
     919        }
     920
     921        $attr_strings = [];
     922        foreach ( $atts as $k => $v ) {
     923                $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
     924        }
     925
     926        $html = sprintf( '<audio %s controls="controls">', join( ' ', $attr_strings ) );
    908927
    909928        $fileurl = '';
    910929        $source = '<source type="%s" src="%s" />';
    911930        foreach ( $default_types as $fallback ) {
    912931                if ( ! empty( $$fallback ) ) {
    913932                        if ( empty( $fileurl ) )
    914933                                $fileurl = $$fallback;
    915934                        $type = wp_check_filetype( $$fallback );
    916935                        $html .= sprintf( $source, $type['type'], esc_url( $$fallback ) );
    917936                }
    918937        }
    919938
    920939        if ( 'mediaelement' === $library )
    921940                $html .= wp_mediaelement_fallback( $fileurl );
    922941        $html .= '</audio>';
    923942
    924943        return apply_filters( 'wp_audio_shortcode', $html, $atts, $audio, $post_id );
    925944}
    926945add_shortcode( 'audio', apply_filters( 'wp_audio_shortcode_handler', 'wp_audio_shortcode' ) );
    927946
    function wp_get_video_extensions() { 
    940959 *
    941960 * This implements the functionality of the Video Shortcode for displaying
    942961 * WordPress mp4s in a post.
    943962 *
    944963 * @since 3.6.0
    945964 *
    946965 * @param array $attr Attributes of the shortcode.
    947966 * @return string HTML content to display video.
    948967 */
    949968function wp_video_shortcode( $attr ) {
    950969        global $content_width;
    951970        $post_id = get_post() ? get_the_ID() : 0;
    952971
    953972        static $instances = 0;
    954973        $instances++;
    955974
    956975        $video = null;
    957976
    958977        $default_types = wp_get_video_extensions();
    959978        $defaults_atts = array(
    960                 'src' => '',
    961                 'poster' => '',
    962                 'height' => 360,
    963                 'width' => empty( $content_width ) ? 640 : $content_width,
     979                'src'      => '',
     980                'poster'   => '',
     981                'loop'     => '',
     982                'autoplay' => '',
     983                'preload'  => 'metadata',
     984                'height'   => 360,
     985                'width'    => empty( $content_width ) ? 640 : $content_width,
    964986        );
    965987
    966988        foreach ( $default_types as $type )
    967989                $defaults_atts[$type] = '';
    968990
    969991        $atts = shortcode_atts( $defaults_atts, $attr, 'video' );
    970992        extract( $atts );
    971993
    972994        $w = $width;
    973995        $h = $height;
    974996        if ( is_admin() && $width > 600 )
    975997                $w = 600;
    976998        elseif ( ! is_admin() && $w > $defaults_atts['width'] )
    977999                $w = $defaults_atts['width'];
    9781000
    9791001        if ( $w < $width )
    9801002                $height = round( ( $h * $w ) / $width );
    9811003
    9821004        $width = $w;
    9831005
    function wp_video_shortcode( $attr ) { 
    10011023        if ( ! $primary ) {
    10021024                $videos = get_attached_media( 'video', $post_id );
    10031025                if ( empty( $videos ) )
    10041026                        return;
    10051027
    10061028                $video = reset( $videos );
    10071029                $src = wp_get_attachment_url( $video->ID );
    10081030                if ( empty( $src ) )
    10091031                        return;
    10101032
    10111033                array_unshift( $default_types, 'src' );
    10121034        }
    10131035
    10141036        $library = apply_filters( 'wp_video_shortcode_library', 'mediaelement' );
    10151037        if ( 'mediaelement' === $library && did_action( 'init' ) ) {
    10161038                wp_enqueue_style( 'wp-mediaelement' );
    10171039                wp_enqueue_script( 'wp-mediaelement' );
    10181040        }
    10191041
    10201042        $atts = array(
    1021                 sprintf( 'class="%s"', apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ) ),
    1022                 sprintf( 'id="video-%d-%d"', $post_id, $instances ),
    1023                 sprintf( 'width="%d"', $width ),
    1024                 sprintf( 'height="%d"', $height ),
     1043                'class'    => apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ),
     1044                'id'       => sprintf( 'video-%d-%d', $post_id, $instances ),
     1045                'width'    => absint( $width ),
     1046                'height'   => absint( $height ),
     1047                'poster'   => esc_url( $poster ),
     1048                'loop'     => $loop,
     1049                'autoplay' => $autoplay,
     1050                'preload'  => $preload,
    10251051        );
    10261052
    1027         if ( ! empty( $poster ) )
    1028                 $atts[] = sprintf( 'poster="%s"', esc_url( $poster ) );
     1053        // These ones should just be omitted altogether if they are blank
     1054        foreach ( array( 'poster', 'loop', 'autoplay', 'preload' ) as $a ) {
     1055                if ( empty( $atts[$a] ) )
     1056                        unset( $atts[$a] );
     1057        }
     1058
     1059        $attr_strings = [];
     1060        foreach ( $atts as $k => $v ) {
     1061                $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
     1062        }
    10291063
    1030         $html = sprintf( '<video %s controls="controls" preload="none">', join( ' ', $atts ) );
     1064        $html = sprintf( '<video %s controls="controls">', join( ' ', $attr_strings ) );
    10311065
    10321066        $fileurl = '';
    10331067        $source = '<source type="%s" src="%s" />';
    10341068        foreach ( $default_types as $fallback ) {
    10351069                if ( ! empty( $$fallback ) ) {
    10361070                        if ( empty( $fileurl ) )
    10371071                                $fileurl = $$fallback;
    10381072                        $type = wp_check_filetype( $$fallback );
    10391073                        // m4v sometimes shows up as video/mpeg which collides with mp4
    10401074                        if ( 'm4v' === $type['ext'] )
    10411075                                $type['type'] = 'video/m4v';
    10421076                        $html .= sprintf( $source, $type['type'], esc_url( $$fallback ) );
    10431077                }
    10441078        }
    10451079        if ( 'mediaelement' === $library )
    10461080                $html .= wp_mediaelement_fallback( $fileurl );
    10471081        $html .= '</video>';
    10481082
     1083        $html = sprintf( '<div style="width: %dpx; max-width: 100%%;">%s</div>', $width, $html );
    10491084        return apply_filters( 'wp_video_shortcode', $html, $atts, $video, $post_id );
    10501085}
    10511086add_shortcode( 'video', apply_filters( 'wp_video_shortcode_handler', 'wp_video_shortcode' ) );
    10521087
    10531088/**
    10541089 * Display previous image link that has the same post parent.
    10551090 *
    10561091 * @since 2.5.0
    10571092 * @param string $size Optional, default is 'thumbnail'. Size of image, either array or string. 0 or 'none' will default to post_title or $text;
    10581093 * @param string $text Optional, default is false. If included, link will reflect $text variable.
    10591094 * @return string HTML content.
    10601095 */
    10611096function previous_image_link($size = 'thumbnail', $text = false) {
    10621097        adjacent_image_link(true, $size, $text);
    10631098}
    10641099
    10651100/**
    10661101 * Display next image link that has the same post parent.
    10671102 *
    10681103 * @since 2.5.0