wp_audio_shortcode
Builds the Audio shortcode output.
Description
This implements the functionality of the Audio Shortcode for displaying WordPress mp3s in a post.
Returns (string|void)
HTML content to display audio.
Parameters (2)
- 0. $attr (array)
- Attributes of the audio shortcode.
Options
- src (string) =>
''
URL to the source of the audio file.
- loop (string) =>
''
The loop attribute for the
- autoplay (string) =>
''
The autoplay attribute for the
- preload (string) =>
'none'
The preload attribute for the
- class (string) =>
'wp-audio-shortcode'
The class attribute for the
array( /** * URL to the source of the audio file. * * @type string * @default '' */ 'src' => '', /** * The 'loop' attribute for the `` element. * * @type string * @default '' */ 'loop' => '', /** * The 'autoplay' attribute for the `` element. * * @type string * @default '' */ 'autoplay' => '', /** * The 'preload' attribute for the `` element. * * @type string * @default 'none' */ 'preload' => 'none', /** * The 'class' attribute for the `` element. * * @type string * @default 'wp-audio-shortcode' */ 'class' => 'wp-audio-shortcode' );
…
- src (string) =>
- 1. $content — Optional. (string) =>
''
- Shortcode content.
Usage
if ( !function_exists( 'wp_audio_shortcode' ) ) { require_once ABSPATH . WPINC . '/media.php'; } // Attributes of the audio shortcode. $attr = array( 'src' => '', 'loop' => '', 'autoplay' => '', 'preload' => 'none', 'class' => 'wp-audio-shortcode' ); // Shortcode content. $content = ''; // NOTICE! Understand what this does before running. $result = wp_audio_shortcode($attr, $content);
Defined (1)
The function is defined in the following location(s).
- /wp-includes/media.php
- function wp_audio_shortcode( $attr, $content = '' ) {
- $post_id = get_post() ? get_the_ID() : 0;
- static $instance = 0;
- $instance++;
- /**
- * Filters the default audio shortcode output.
- *
- * If the filtered output isn't empty, it will be used instead of generating the default audio template.
- *
- * @since 3.6.0
- *
- * @param string $html Empty variable to be replaced with shortcode markup.
- * @param array $attr Attributes of the shortcode. @see wp_audio_shortcode()
- * @param string $content Shortcode content.
- * @param int $instance Unique numeric ID of this audio shortcode instance.
- */
- $override = apply_filters( 'wp_audio_shortcode_override', '', $attr, $content, $instance );
- if ( '' !== $override ) {
- return $override;
- }
- $audio = null;
- $default_types = wp_get_audio_extensions();
- $defaults_atts = array(
- 'src' => '',
- 'loop' => '',
- 'autoplay' => '',
- 'preload' => 'none',
- 'class' => 'wp-audio-shortcode',
- 'style' => 'width: 100%;'
- );
- foreach ( $default_types as $type ) {
- $defaults_atts[$type] = '';
- }
- $atts = shortcode_atts( $defaults_atts, $attr, 'audio' );
- $primary = false;
- if ( ! empty( $atts['src'] ) ) {
- $type = wp_check_filetype( $atts['src'], wp_get_mime_types() );
- if ( ! in_array( strtolower( $type['ext'] ), $default_types ) ) {
- }
- $primary = true;
- array_unshift( $default_types, 'src' );
- } else {
- foreach ( $default_types as $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 ) ) {
- return;
- }
- $audio = reset( $audios );
- $atts['src'] = wp_get_attachment_url( $audio->ID );
- if ( empty( $atts['src'] ) ) {
- return;
- }
- array_unshift( $default_types, 'src' );
- }
- /**
- * Filters the media library used for the audio shortcode.
- *
- * @since 3.6.0
- *
- * @param string $library Media library used for the audio shortcode.
- */
- $library = apply_filters( 'wp_audio_shortcode_library', 'mediaelement' );
- if ( 'mediaelement' === $library && did_action( 'init' ) ) {
- wp_enqueue_style( 'wp-mediaelement' );
- wp_enqueue_script( 'wp-mediaelement' );
- }
- /**
- * Filters the class attribute for the audio shortcode output container.
- *
- * @since 3.6.0
- *
- * @param string $class CSS class or list of space-separated classes.
- */
- $atts['class'] = apply_filters( 'wp_audio_shortcode_class', $atts['class'] );
- $html_atts = array(
- 'class' => $atts['class'],
- 'id' => sprintf( 'audio-%d-%d', $post_id, $instance ),
- 'loop' => wp_validate_boolean( $atts['loop'] ),
- 'autoplay' => wp_validate_boolean( $atts['autoplay'] ),
- 'preload' => $atts['preload'],
- 'style' => $atts['style'],
- );
- // These ones should just be omitted altogether if they are blank
- foreach ( array( 'loop', 'autoplay', 'preload' ) as $a ) {
- if ( empty( $html_atts[$a] ) ) {
- unset( $html_atts[$a] );
- }
- }
- $attr_strings = array();
- foreach ( $html_atts as $k => $v ) {
- $attr_strings[] = $k . '="' . esc_attr( $v ) . '"';
- }
- $html = '';
- if ( 'mediaelement' === $library && 1 === $instance ) {
- $html .= "<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->\n";
- }
- $html .= sprintf( '<audio %s controls="controls">', join( ' ', $attr_strings ) );
- $fileurl = '';
- $source = '<source type="%s" src="%s" />';
- foreach ( $default_types as $fallback ) {
- if ( ! empty( $atts[ $fallback ] ) ) {
- if ( empty( $fileurl ) ) {
- $fileurl = $atts[ $fallback ];
- }
- $type = wp_check_filetype( $atts[ $fallback ], wp_get_mime_types() );
- $url = add_query_arg( '_', $instance, $atts[ $fallback ] );
- $html .= sprintf( $source, $type['type'], esc_url( $url ) );
- }
- }
- if ( 'mediaelement' === $library ) {
- $html .= wp_mediaelement_fallback( $fileurl );
- }
- $html .= '</audio>';
- /**
- * Filters the audio shortcode output.
- *
- * @since 3.6.0
- *
- * @param string $html Audio shortcode HTML output.
- * @param array $atts Array of audio shortcode attributes.
- * @param string $audio Audio file.
- * @param int $post_id Post ID.
- * @param string $library Media library used for the audio shortcode.
- */
- return apply_filters( 'wp_audio_shortcode', $html, $atts, $audio, $post_id, $library );
- }