WordPress.org

Make WordPress Core

Changeset 28342


Ignore:
Timestamp:
05/07/2014 05:35:09 PM (7 years ago)
Author:
wonderboymusic
Message:

audio, video, and playlist shortcodes:

  • Convert all instances of variable variables to array properties
  • Eradicate use of extract()
  • Rename $atts to $html_atts where collision with new $atts (shortcode atts holder) var might occur

See #22400, #27881.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/media.php

    r28194 r28342  
    11971197    }
    11981198
    1199     extract( shortcode_atts( array(
     1199    $atts = shortcode_atts( array(
    12001200        'type'      => 'audio',
    12011201        'order'     => 'ASC',
     
    12091209        'images'    => true,
    12101210        'artists'   => true
    1211     ), $attr, 'playlist' ) );
    1212 
    1213     $id = intval( $id );
    1214     if ( 'RAND' == $order ) {
    1215         $orderby = 'none';
     1211    ), $attr, 'playlist' );
     1212
     1213    $id = intval( $atts['id'] );
     1214    if ( 'RAND' == $atts['order'] ) {
     1215        $atts['orderby'] = 'none';
    12161216    }
    12171217
     
    12191219        'post_status' => 'inherit',
    12201220        'post_type' => 'attachment',
    1221         'post_mime_type' => $type,
    1222         'order' => $order,
    1223         'orderby' => $orderby
     1221        'post_mime_type' => $atts['type'],
     1222        'order' => $atts['order'],
     1223        'orderby' => $atts['orderby']
    12241224    );
    12251225
    1226     if ( ! empty( $include ) ) {
    1227         $args['include'] = $include;
     1226    if ( ! empty( $atts['include'] ) ) {
     1227        $args['include'] = $atts['include'];
    12281228        $_attachments = get_posts( $args );
    12291229
     
    12321232            $attachments[$val->ID] = $_attachments[$key];
    12331233        }
    1234     } elseif ( ! empty( $exclude ) ) {
     1234    } elseif ( ! empty( $atts['exclude'] ) ) {
    12351235        $args['post_parent'] = $id;
    1236         $args['exclude'] = $exclude;
     1236        $args['exclude'] = $atts['exclude'];
    12371237        $attachments = get_children( $args );
    12381238    } else {
     
    12611261    $theme_height = empty( $content_width ) ? $default_height : round( ( $default_height * $theme_width ) / $default_width );
    12621262
    1263     $data = compact( 'type' );
    1264 
    1265     // don't pass strings to JSON, will be truthy in JS
    1266     foreach ( array( 'tracklist', 'tracknumbers', 'images', 'artists' ) as $key ) {
    1267         $data[$key] = filter_var( $$key, FILTER_VALIDATE_BOOLEAN );
    1268     }
     1263    $data = array(
     1264        'type' => $atts['type'],
     1265        // don't pass strings to JSON, will be truthy in JS
     1266        'tracklist' => filter_var( $atts['tracklist'], FILTER_VALIDATE_BOOLEAN ),
     1267        'tracknumbers' => filter_var( $atts['tracknumbers'], FILTER_VALIDATE_BOOLEAN ),
     1268        'images' => filter_var( $atts['images'], FILTER_VALIDATE_BOOLEAN ),
     1269        'artists' => filter_var( $atts['artists'], FILTER_VALIDATE_BOOLEAN ),
     1270    );
    12691271
    12701272    $tracks = array();
     
    12901292            }
    12911293
    1292             if ( 'video' === $type ) {
     1294            if ( 'video' === $atts['type'] ) {
    12931295                if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) {
    12941296                    $width = $meta['width'];
     
    13101312        }
    13111313
    1312         if ( $images ) {
    1313             $id = get_post_thumbnail_id( $attachment->ID );
    1314             if ( ! empty( $id ) ) {
    1315                 list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'full' );
     1314        if ( $atts['images'] ) {
     1315            $thumb_id = get_post_thumbnail_id( $attachment->ID );
     1316            if ( ! empty( $thumb_id ) ) {
     1317                list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' );
    13161318                $track['image'] = compact( 'src', 'width', 'height' );
    1317                 list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'thumbnail' );
     1319                list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' );
    13181320                $track['thumb'] = compact( 'src', 'width', 'height' );
    13191321            } else {
     
    13301332    $data['tracks'] = $tracks;
    13311333
    1332     $safe_type = esc_attr( $type );
    1333     $safe_style = esc_attr( $style );
     1334    $safe_type = esc_attr( $atts['type'] );
     1335    $safe_style = esc_attr( $atts['style'] );
    13341336
    13351337    ob_start();
     
    13441346         * @param string $style The 'theme' for the playlist. Core provides 'light' and 'dark'.
    13451347         */
    1346         do_action( 'wp_playlist_scripts', $type, $style );
     1348        do_action( 'wp_playlist_scripts', $atts['type'], $atts['style'] );
    13471349    } ?>
    13481350<div class="wp-playlist wp-<?php echo $safe_type ?>-playlist wp-playlist-<?php echo $safe_style ?>">
    1349     <?php if ( 'audio' === $type ): ?>
     1351    <?php if ( 'audio' === $atts['type'] ): ?>
    13501352    <div class="wp-playlist-current-item"></div>
    13511353    <?php endif ?>
     
    14831485     * @param int    $instances Unique numeric ID of this audio shortcode instance.
    14841486     */
    1485     $html = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instances );
    1486     if ( '' !== $html )
    1487         return $html;
     1487    $override = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instances );
     1488    if ( '' !== $override ) {
     1489        return $override;
     1490    }
    14881491
    14891492    $audio = null;
     
    14961499        'preload'  => 'none'
    14971500    );
    1498     foreach ( $default_types as $type )
     1501    foreach ( $default_types as $type ) {
    14991502        $defaults_atts[$type] = '';
     1503    }
    15001504
    15011505    $atts = shortcode_atts( $defaults_atts, $attr, 'audio' );
    1502     extract( $atts );
    15031506
    15041507    $primary = false;
    1505     if ( ! empty( $src ) ) {
    1506         $type = wp_check_filetype( $src, wp_get_mime_types() );
    1507         if ( ! in_array( strtolower( $type['ext'] ), $default_types ) )
    1508             return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $src ), esc_html( $src ) );
     1508    if ( ! empty( $atts['src'] ) ) {
     1509        $type = wp_check_filetype( $atts['src'], wp_get_mime_types() );
     1510        if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
     1511            return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
     1512        }
    15091513        $primary = true;
    15101514        array_unshift( $default_types, 'src' );
    15111515    } else {
    15121516        foreach ( $default_types as $ext ) {
    1513             if ( ! empty( $$ext ) ) {
    1514                 $type = wp_check_filetype( $$ext, wp_get_mime_types() );
    1515                 if ( strtolower( $type['ext'] ) === $ext )
     1517            if ( ! empty( $atts[ $ext ] ) ) {
     1518                $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );
     1519                if ( strtolower( $type['ext'] ) === $ext ) {
    15161520                    $primary = true;
     1521                }
    15171522            }
    15181523        }
     
    15211526    if ( ! $primary ) {
    15221527        $audios = get_attached_media( 'audio', $post_id );
    1523         if ( empty( $audios ) )
     1528        if ( empty( $audios ) ) {
    15241529            return;
     1530        }
    15251531
    15261532        $audio = reset( $audios );
    1527         $src = wp_get_attachment_url( $audio->ID );
    1528         if ( empty( $src ) )
     1533        $atts['src'] = wp_get_attachment_url( $audio->ID );
     1534        if ( empty( $atts['src'] ) ) {
    15291535            return;
     1536        }
    15301537
    15311538        array_unshift( $default_types, 'src' );
     
    15521559     * @param string $class CSS class or list of space-separated classes.
    15531560     */
    1554     $atts = array(
     1561    $html_atts = array(
    15551562        'class'    => apply_filters( 'wp_audio_shortcode_class', 'wp-audio-shortcode' ),
    15561563        'id'       => sprintf( 'audio-%d-%d', $post_id, $instances ),
    1557         'loop'     => $loop,
    1558         'autoplay' => $autoplay,
    1559         'preload'  => $preload,
     1564        'loop'     => $atts['loop'],
     1565        'autoplay' => $atts['autoplay'],
     1566        'preload'  => $atts['preload'],
    15601567        'style'    => 'width: 100%; visibility: hidden;',
    15611568    );
     
    15631570    // These ones should just be omitted altogether if they are blank
    15641571    foreach ( array( 'loop', 'autoplay', 'preload' ) as $a ) {
    1565         if ( empty( $atts[$a] ) )
    1566             unset( $atts[$a] );
     1572        if ( empty( $html_atts[$a] ) ) {
     1573            unset( $html_atts[$a] );
     1574        }
    15671575    }
    15681576
    15691577    $attr_strings = array();
    1570     foreach ( $atts as $k => $v ) {
     1578    foreach ( $html_atts as $k => $v ) {
    15711579        $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
    15721580    }
    15731581
    15741582    $html = '';
    1575     if ( 'mediaelement' === $library && 1 === $instances )
     1583    if ( 'mediaelement' === $library && 1 === $instances ) {
    15761584        $html .= "<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->\n";
     1585    }
    15771586    $html .= sprintf( '<audio %s controls="controls">', join( ' ', $attr_strings ) );
    15781587
     
    15801589    $source = '<source type="%s" src="%s" />';
    15811590    foreach ( $default_types as $fallback ) {
    1582         if ( ! empty( $$fallback ) ) {
    1583             if ( empty( $fileurl ) )
    1584                 $fileurl = $$fallback;
    1585             $type = wp_check_filetype( $$fallback, wp_get_mime_types() );
    1586             $url = add_query_arg( '_', $instances, $$fallback );
     1591        if ( ! empty( $atts[ $fallback ] ) ) {
     1592            if ( empty( $fileurl ) ) {
     1593                $fileurl = $atts[ $fallback ];
     1594            }
     1595            $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
     1596            $url = add_query_arg( '_', $instances, $atts[ $fallback ] );
    15871597            $html .= sprintf( $source, $type['type'], esc_url( $url ) );
    15881598        }
    15891599    }
    15901600
    1591     if ( 'mediaelement' === $library )
     1601    if ( 'mediaelement' === $library ) {
    15921602        $html .= wp_mediaelement_fallback( $fileurl );
     1603    }
    15931604    $html .= '</audio>';
    15941605
     
    16751686     * @param int    $instances Unique numeric ID of this video shortcode instance.
    16761687     */
    1677     $html = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances );
    1678     if ( '' !== $html )
    1679         return $html;
     1688    $override = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances );
     1689    if ( '' !== $override ) {
     1690        return $override;
     1691    }
    16801692
    16811693    $video = null;
     
    16921704    );
    16931705
    1694     foreach ( $default_types as $type )
     1706    foreach ( $default_types as $type ) {
    16951707        $defaults_atts[$type] = '';
     1708    }
    16961709
    16971710    $atts = shortcode_atts( $defaults_atts, $attr, 'video' );
    1698     extract( $atts );
    16991711
    17001712    if ( is_admin() ) {
    17011713        // shrink the video so it isn't huge in the admin
    1702         if ( $width > $defaults_atts['width'] ) {
    1703             $height = round( ( $height * $defaults_atts['width'] ) / $width );
    1704             $width = $defaults_atts['width'];
     1714        if ( $atts['width'] > $defaults_atts['width'] ) {
     1715            $atts['height'] = round( ( $atts['height'] * $defaults_atts['width'] ) / $atts['width'] );
     1716            $atts['width'] = $defaults_atts['width'];
    17051717        }
    17061718    } else {
    17071719        // if the video is bigger than the theme
    1708         if ( ! empty( $content_width ) && $width > $content_width ) {
    1709             $height = round( ( $height * $content_width ) / $width );
    1710             $width = $content_width;
     1720        if ( ! empty( $content_width ) && $atts['width'] > $content_width ) {
     1721            $atts['height'] = round( ( $atts['height'] * $content_width ) / $atts['width'] );
     1722            $atts['width'] = $content_width;
    17111723        }
    17121724    }
     
    17151727
    17161728    $primary = false;
    1717     if ( ! empty( $src ) ) {
    1718         if ( ! preg_match( $yt_pattern, $src ) ) {
    1719             $type = wp_check_filetype( $src, wp_get_mime_types() );
     1729    if ( ! empty( $atts['src'] ) ) {
     1730        if ( ! preg_match( $yt_pattern, $atts['src'] ) ) {
     1731            $type = wp_check_filetype( $atts['src'], wp_get_mime_types() );
    17201732            if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
    1721                 return sprintf( '<a class="wp-embedded-video" href="%s">%s</a>', esc_url( $src ), esc_html( $src ) );
     1733                return sprintf( '<a class="wp-embedded-video" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] ) );
    17221734            }
    17231735        }
     
    17261738    } else {
    17271739        foreach ( $default_types as $ext ) {
    1728             if ( ! empty( $$ext ) ) {
    1729                 $type = wp_check_filetype( $$ext, wp_get_mime_types() );
    1730                 if ( strtolower( $type['ext'] ) === $ext )
     1740            if ( ! empty( $atts[ $ext ] ) ) {
     1741                $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() );
     1742                if ( strtolower( $type['ext'] ) === $ext ) {
    17311743                    $primary = true;
     1744                }
    17321745            }
    17331746        }
     
    17361749    if ( ! $primary ) {
    17371750        $videos = get_attached_media( 'video', $post_id );
    1738         if ( empty( $videos ) )
     1751        if ( empty( $videos ) ) {
    17391752            return;
     1753        }
    17401754
    17411755        $video = reset( $videos );
    1742         $src = wp_get_attachment_url( $video->ID );
    1743         if ( empty( $src ) )
     1756        $atts['src'] = wp_get_attachment_url( $video->ID );
     1757        if ( empty( $atts['src'] ) ) {
    17441758            return;
     1759        }
    17451760
    17461761        array_unshift( $default_types, 'src' );
     
    17671782     * @param string $class CSS class or list of space-separated classes.
    17681783     */
    1769     $atts = array(
     1784    $html_atts = array(
    17701785        'class'    => apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ),
    17711786        'id'       => sprintf( 'video-%d-%d', $post_id, $instances ),
    1772         'width'    => absint( $width ),
    1773         'height'   => absint( $height ),
    1774         'poster'   => esc_url( $poster ),
    1775         'loop'     => $loop,
    1776         'autoplay' => $autoplay,
    1777         'preload'  => $preload,
     1787        'width'    => absint( $atts['width'] ),
     1788        'height'   => absint( $atts['height'] ),
     1789        'poster'   => esc_url( $atts['poster'] ),
     1790        'loop'     => $atts['loop'],
     1791        'autoplay' => $atts['autoplay'],
     1792        'preload'  => $atts['preload'],
    17781793    );
    17791794
    17801795    // These ones should just be omitted altogether if they are blank
    17811796    foreach ( array( 'poster', 'loop', 'autoplay', 'preload' ) as $a ) {
    1782         if ( empty( $atts[$a] ) )
    1783             unset( $atts[$a] );
     1797        if ( empty( $html_atts[$a] ) ) {
     1798            unset( $html_atts[$a] );
     1799        }
    17841800    }
    17851801
    17861802    $attr_strings = array();
    1787     foreach ( $atts as $k => $v ) {
     1803    foreach ( $html_atts as $k => $v ) {
    17881804        $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
    17891805    }
    17901806
    17911807    $html = '';
    1792     if ( 'mediaelement' === $library && 1 === $instances )
     1808    if ( 'mediaelement' === $library && 1 === $instances ) {
    17931809        $html .= "<!--[if lt IE 9]><script>document.createElement('video');</script><![endif]-->\n";
     1810    }
    17941811    $html .= sprintf( '<video %s controls="controls">', join( ' ', $attr_strings ) );
    17951812
     
    17971814    $source = '<source type="%s" src="%s" />';
    17981815    foreach ( $default_types as $fallback ) {
    1799         if ( ! empty( $$fallback ) ) {
    1800             if ( empty( $fileurl ) )
    1801                 $fileurl = $$fallback;
    1802 
    1803             if ( 'src' === $fallback && preg_match( $yt_pattern, $src ) ) {
     1816        if ( ! empty( $atts[ $fallback ] ) ) {
     1817            if ( empty( $fileurl ) ) {
     1818                $fileurl = $atts[ $fallback ];
     1819            }
     1820            if ( 'src' === $fallback && preg_match( $yt_pattern, $atts['src'] ) ) {
    18041821                $type = array( 'type' => 'video/youtube' );
    18051822            } else {
    1806                 $type = wp_check_filetype( $$fallback, wp_get_mime_types() );
     1823                $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
    18071824            }
    1808             $url = add_query_arg( '_', $instances, $$fallback );
     1825            $url = add_query_arg( '_', $instances, $atts[ $fallback ] );
    18091826            $html .= sprintf( $source, $type['type'], esc_url( $url ) );
    18101827        }
     
    18121829
    18131830    if ( ! empty( $content ) ) {
    1814         if ( false !== strpos( $content, "\n" ) )
     1831        if ( false !== strpos( $content, "\n" ) ) {
    18151832            $content = str_replace( array( "\r\n", "\n", "\t" ), '', $content );
    1816 
     1833        }
    18171834        $html .= trim( $content );
    18181835    }
    18191836
    1820     if ( 'mediaelement' === $library )
     1837    if ( 'mediaelement' === $library ) {
    18211838        $html .= wp_mediaelement_fallback( $fileurl );
     1839    }
    18221840    $html .= '</video>';
    18231841
    1824     $html = sprintf( '<div style="width: %dpx; max-width: 100%%;" class="wp-video">%s</div>', $width, $html );
     1842    $output = sprintf( '<div style="width: %dpx; max-width: 100%%;" class="wp-video">%s</div>', $atts['width'], $html );
    18251843
    18261844    /**
     
    18291847     * @since 3.6.0
    18301848     *
    1831      * @param string $html    Video shortcode HTML output.
     1849     * @param string $output  Video shortcode HTML output.
    18321850     * @param array  $atts    Array of video shortcode attributes.
    18331851     * @param string $video   Video file.
     
    18351853     * @param string $library Media library used for the video shortcode.
    18361854     */
    1837     return apply_filters( 'wp_video_shortcode', $html, $atts, $video, $post_id, $library );
     1855    return apply_filters( 'wp_video_shortcode', $output, $atts, $video, $post_id, $library );
    18381856}
    18391857add_shortcode( 'video', 'wp_video_shortcode' );
Note: See TracChangeset for help on using the changeset viewer.