diff --git a/wp-includes/media.php b/wp-includes/media.php index 14ce8a6cfb..8127ff134a 100644 --- a/wp-includes/media.php +++ b/wp-includes/media.php @@ -1196,7 +1196,7 @@ function wp_playlist_shortcode( $attr ) { unset( $attr['orderby'] ); } - extract( shortcode_atts( array( + $atts = shortcode_atts( array( 'type' => 'audio', 'order' => 'ASC', 'orderby' => 'menu_order ID', @@ -1208,32 +1208,32 @@ function wp_playlist_shortcode( $attr ) { 'tracknumbers' => true, 'images' => true, 'artists' => true - ), $attr, 'playlist' ) ); + ), $attr, 'playlist' ); - $id = intval( $id ); - if ( 'RAND' == $order ) { - $orderby = 'none'; + $id = intval( $atts['id'] ); + if ( 'RAND' == $atts['order'] ) { + $atts['orderby'] = 'none'; } $args = array( 'post_status' => 'inherit', 'post_type' => 'attachment', - 'post_mime_type' => $type, - 'order' => $order, - 'orderby' => $orderby + 'post_mime_type' => $atts['type'], + 'order' => $atts['order'], + 'orderby' => $atts['orderby'] ); - if ( ! empty( $include ) ) { - $args['include'] = $include; + if ( ! empty( $atts['include'] ) ) { + $args['include'] = $atts['include']; $_attachments = get_posts( $args ); $attachments = array(); foreach ( $_attachments as $key => $val ) { $attachments[$val->ID] = $_attachments[$key]; } - } elseif ( ! empty( $exclude ) ) { + } elseif ( ! empty( $atts['exclude'] ) ) { $args['post_parent'] = $id; - $args['exclude'] = $exclude; + $args['exclude'] = $atts['exclude']; $attachments = get_children( $args ); } else { $args['post_parent'] = $id; @@ -1260,12 +1260,14 @@ function wp_playlist_shortcode( $attr ) { $theme_width = empty( $content_width ) ? $default_width : ( $content_width - $outer ); $theme_height = empty( $content_width ) ? $default_height : round( ( $default_height * $theme_width ) / $default_width ); - $data = compact( 'type' ); - - // don't pass strings to JSON, will be truthy in JS - foreach ( array( 'tracklist', 'tracknumbers', 'images', 'artists' ) as $key ) { - $data[$key] = filter_var( $$key, FILTER_VALIDATE_BOOLEAN ); - } + $data = array( + 'type' => $atts['type'], + // don't pass strings to JSON, will be truthy in JS + 'tracklist' => filter_var( $atts['tracklist'], FILTER_VALIDATE_BOOLEAN ), + 'tracknumbers' => filter_var( $atts['tracknumbers'], FILTER_VALIDATE_BOOLEAN ), + 'images' => filter_var( $atts['images'], FILTER_VALIDATE_BOOLEAN ), + 'artists' => filter_var( $atts['artists'], FILTER_VALIDATE_BOOLEAN ), + ); $tracks = array(); foreach ( $attachments as $attachment ) { @@ -1289,7 +1291,7 @@ function wp_playlist_shortcode( $attr ) { } } - if ( 'video' === $type ) { + if ( 'video' === $atts['type'] ) { if ( ! empty( $meta['width'] ) && ! empty( $meta['height'] ) ) { $width = $meta['width']; $height = $meta['height']; @@ -1309,12 +1311,12 @@ function wp_playlist_shortcode( $attr ) { } } - if ( $images ) { - $id = get_post_thumbnail_id( $attachment->ID ); - if ( ! empty( $id ) ) { - list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'full' ); + if ( $atts['images'] ) { + $thumb_id = get_post_thumbnail_id( $attachment->ID ); + if ( ! empty( $thumb_id ) ) { + list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'full' ); $track['image'] = compact( 'src', 'width', 'height' ); - list( $src, $width, $height ) = wp_get_attachment_image_src( $id, 'thumbnail' ); + list( $src, $width, $height ) = wp_get_attachment_image_src( $thumb_id, 'thumbnail' ); $track['thumb'] = compact( 'src', 'width', 'height' ); } else { $src = wp_mime_type_icon( $attachment->ID ); @@ -1329,8 +1331,8 @@ function wp_playlist_shortcode( $attr ) { } $data['tracks'] = $tracks; - $safe_type = esc_attr( $type ); - $safe_style = esc_attr( $style ); + $safe_type = esc_attr( $atts['type'] ); + $safe_style = esc_attr( $atts['style'] ); ob_start(); @@ -1343,10 +1345,10 @@ function wp_playlist_shortcode( $attr ) { * @param string $type Type of playlist. Possible values are 'audio' or 'video'. * @param string $style The 'theme' for the playlist. Core provides 'light' and 'dark'. */ - do_action( 'wp_playlist_scripts', $type, $style ); + do_action( 'wp_playlist_scripts', $atts['type'], $atts['style'] ); } ?>
- +
< controls="controls" preload="none" width=" '', 'preload' => 'none' ); - foreach ( $default_types as $type ) + foreach ( $default_types as $type ) { $defaults_atts[$type] = ''; + } $atts = shortcode_atts( $defaults_atts, $attr, 'audio' ); - extract( $atts ); $primary = false; - if ( ! empty( $src ) ) { - $type = wp_check_filetype( $src, wp_get_mime_types() ); - if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) - return sprintf( '%s', esc_url( $src ), esc_html( $src ) ); + if ( ! empty( $atts['src'] ) ) { + $type = wp_check_filetype( $atts['src'], wp_get_mime_types() ); + if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) { + return sprintf( '%s', esc_url( $atts['src'] ), esc_html( $atts['src'] ) ); + } $primary = true; array_unshift( $default_types, 'src' ); } else { foreach ( $default_types as $ext ) { - if ( ! empty( $$ext ) ) { - $type = wp_check_filetype( $$ext, wp_get_mime_types() ); - if ( strtolower( $type['ext'] ) === $ext ) + if ( ! empty( $atts[ $ext ] ) ) { + $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() ); + if ( strtolower( $type['ext'] ) === $ext ) { $primary = true; + } } } } if ( ! $primary ) { $audios = get_attached_media( 'audio', $post_id ); - if ( empty( $audios ) ) + if ( empty( $audios ) ) { return; + } $audio = reset( $audios ); - $src = wp_get_attachment_url( $audio->ID ); - if ( empty( $src ) ) + $atts['src'] = wp_get_attachment_url( $audio->ID ); + if ( empty( $atts['src'] ) ) { return; + } array_unshift( $default_types, 'src' ); } @@ -1551,45 +1558,49 @@ function wp_audio_shortcode( $attr, $content = '' ) { * * @param string $class CSS class or list of space-separated classes. */ - $atts = array( + $html_atts = array( 'class' => apply_filters( 'wp_audio_shortcode_class', 'wp-audio-shortcode' ), 'id' => sprintf( 'audio-%d-%d', $post_id, $instances ), - 'loop' => $loop, - 'autoplay' => $autoplay, - 'preload' => $preload, + 'loop' => $atts['loop'], + 'autoplay' => $atts['autoplay'], + 'preload' => $atts['preload'], 'style' => 'width: 100%; visibility: hidden;', ); // These ones should just be omitted altogether if they are blank foreach ( array( 'loop', 'autoplay', 'preload' ) as $a ) { - if ( empty( $atts[$a] ) ) - unset( $atts[$a] ); + if ( empty( $html_atts[$a] ) ) { + unset( $html_atts[$a] ); + } } $attr_strings = array(); - foreach ( $atts as $k => $v ) { + foreach ( $html_atts as $k => $v ) { $attr_strings[] = $k . '="' . esc_attr( $v ) . '"'; } $html = ''; - if ( 'mediaelement' === $library && 1 === $instances ) + if ( 'mediaelement' === $library && 1 === $instances ) { $html .= "\n"; + } $html .= sprintf( ''; /** @@ -1674,9 +1685,10 @@ function wp_video_shortcode( $attr, $content = '' ) { * @param string $content Video shortcode content. * @param int $instances Unique numeric ID of this video shortcode instance. */ - $html = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances ); - if ( '' !== $html ) - return $html; + $override = apply_filters( 'wp_video_shortcode_override', '', $attr, $content, $instances ); + if ( '' !== $override ) { + return $override; + } $video = null; @@ -1691,57 +1703,60 @@ function wp_video_shortcode( $attr, $content = '' ) { 'height' => 360, ); - foreach ( $default_types as $type ) + foreach ( $default_types as $type ) { $defaults_atts[$type] = ''; + } $atts = shortcode_atts( $defaults_atts, $attr, 'video' ); - extract( $atts ); if ( is_admin() ) { // shrink the video so it isn't huge in the admin - if ( $width > $defaults_atts['width'] ) { - $height = round( ( $height * $defaults_atts['width'] ) / $width ); - $width = $defaults_atts['width']; + if ( $atts['width'] > $defaults_atts['width'] ) { + $atts['height'] = round( ( $atts['height'] * $defaults_atts['width'] ) / $atts['width'] ); + $atts['width'] = $defaults_atts['width']; } } else { // if the video is bigger than the theme - if ( ! empty( $content_width ) && $width > $content_width ) { - $height = round( ( $height * $content_width ) / $width ); - $width = $content_width; + if ( ! empty( $content_width ) && $atts['width'] > $content_width ) { + $atts['height'] = round( ( $atts['height'] * $content_width ) / $atts['width'] ); + $atts['width'] = $content_width; } } $yt_pattern = '#^https?://(:?www\.)?(:?youtube\.com/watch|youtu\.be/)#'; $primary = false; - if ( ! empty( $src ) ) { - if ( ! preg_match( $yt_pattern, $src ) ) { - $type = wp_check_filetype( $src, wp_get_mime_types() ); + if ( ! empty( $atts['src'] ) ) { + if ( ! preg_match( $yt_pattern, $atts['src'] ) ) { + $type = wp_check_filetype( $atts['src'], wp_get_mime_types() ); if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) { - return sprintf( '%s', esc_url( $src ), esc_html( $src ) ); + return sprintf( '%s', esc_url( $atts['src'] ), esc_html( $atts['src'] ) ); } } $primary = true; array_unshift( $default_types, 'src' ); } else { foreach ( $default_types as $ext ) { - if ( ! empty( $$ext ) ) { - $type = wp_check_filetype( $$ext, wp_get_mime_types() ); - if ( strtolower( $type['ext'] ) === $ext ) + if ( ! empty( $atts[ $ext ] ) ) { + $type = wp_check_filetype( $atts[ $ext ], wp_get_mime_types() ); + if ( strtolower( $type['ext'] ) === $ext ) { $primary = true; + } } } } if ( ! $primary ) { $videos = get_attached_media( 'video', $post_id ); - if ( empty( $videos ) ) + if ( empty( $videos ) ) { return; + } $video = reset( $videos ); - $src = wp_get_attachment_url( $video->ID ); - if ( empty( $src ) ) + $atts['src'] = wp_get_attachment_url( $video->ID ); + if ( empty( $atts['src'] ) ) { return; + } array_unshift( $default_types, 'src' ); } @@ -1766,75 +1781,78 @@ function wp_video_shortcode( $attr, $content = '' ) { * * @param string $class CSS class or list of space-separated classes. */ - $atts = array( + $html_atts = array( 'class' => apply_filters( 'wp_video_shortcode_class', 'wp-video-shortcode' ), 'id' => sprintf( 'video-%d-%d', $post_id, $instances ), - 'width' => absint( $width ), - 'height' => absint( $height ), - 'poster' => esc_url( $poster ), - 'loop' => $loop, - 'autoplay' => $autoplay, - 'preload' => $preload, + 'width' => absint( $atts['width'] ), + 'height' => absint( $atts['height'] ), + 'poster' => esc_url( $atts['poster'] ), + 'loop' => $atts['loop'], + 'autoplay' => $atts['autoplay'], + 'preload' => $atts['preload'], ); // These ones should just be omitted altogether if they are blank foreach ( array( 'poster', 'loop', 'autoplay', 'preload' ) as $a ) { - if ( empty( $atts[$a] ) ) - unset( $atts[$a] ); + if ( empty( $html_atts[$a] ) ) { + unset( $html_atts[$a] ); + } } $attr_strings = array(); - foreach ( $atts as $k => $v ) { + foreach ( $html_atts as $k => $v ) { $attr_strings[] = $k . '="' . esc_attr( $v ) . '"'; } $html = ''; - if ( 'mediaelement' === $library && 1 === $instances ) + if ( 'mediaelement' === $library && 1 === $instances ) { $html .= "\n"; + } $html .= sprintf( ''; - $html = sprintf( '
%s
', $width, $html ); + $output = sprintf( '
%s
', $atts['width'], $html ); /** * Filter the output of the video shortcode. * * @since 3.6.0 * - * @param string $html Video shortcode HTML output. + * @param string $output Video shortcode HTML output. * @param array $atts Array of video shortcode attributes. * @param string $video Video file. * @param int $post_id Post ID. * @param string $library Media library used for the video shortcode. */ - return apply_filters( 'wp_video_shortcode', $html, $atts, $video, $post_id, $library ); + return apply_filters( 'wp_video_shortcode', $output, $atts, $video, $post_id, $library ); } add_shortcode( 'video', 'wp_video_shortcode' );