wp_audio_shortcode() WP 3.6.0

Створює HTML код аудіо плеєра за вказаним посиланням на аудіо файл та параметрами виведення плеєра.

Ця функція лежить в основі аудіо шорткодів WordPress і відповідає за виведення HTML коду плеєра. Такий плеєр дозволяє прослуховувати вказаний аудіо файл у браузері.

Функція створює HTML тег <audio> з потрібними атрибутами. У код також додається резервний HTML для випадків, коли браузер не підтримує тег <audio> .

За промовчанням WordPress підтримує такі аудіо формати: mp3, ogg, wma, m4a, wav.

Типи файлів за промовчанням отримує функція wp_get_audio_extensions()

Список підтримуваних шорткодів у WordPress: , , , , ,

Повертає

Строку|null. HTML тег <audio> та додатковий HTML код для резерву.

Використання

wp_audio_shortcode($attr, $content);
$attr
(масив) (обов’язковий)

Параметри обробки шорткоду (виведення аудіо). Можуть бути:

  • src (рядок)
    URL на аудіо файл. Підтримувані формати: mp3, ogg, wma, m4a, wav.
    За замовчуванням: ” (перший аудіо файл, прикріплений до запису)

  • loop (true/false)
    Зациклювання аудіо. Атрибут ‘loop’ для тега <Audio> . Можливо: onабо off.
    За замовчуванням: ”

  • autoplay (true/false)
    Автовідтворення аудіо. Атрибут autoplay для тега <audio> . Можливо: onабо off.
    За замовчуванням: ”

  • preload (рядок)
    Визначає як аудіо має завантажуватися під час завантаження сторінки. Атрибут ‘preload’ для тега <audio> . Може бути:

    • none– не завантажувати аудіо під час завантаження сторінки.
    • auto– завантажувати аудіо під час завантаження сторінки.
    • metadata– завантажувати лише метадані файлу.

    За замовчуванням: ‘none’

  • class (рядок)
    Атрибут ‘class’ для тега <audio> .
    За замовчуванням: ‘wp-audio-shortcode’

  • style (рядок)
    Атрибут ‘style’ для тега <audio> .
    Типово: ‘width: 100%; visibility: hidden;’

Виглядає масив так:

$attr = array(
	'src' => '',
	'loop' => false,
	'autoplay' => false,
	'preload' => 'none',
	'class' => 'wp-audio-shortcode',
	'style' => 'width: 100%; visibility: hidden;'
);
$content
(рядок)
Контент шорткоду. Передається у фільтр
wp_audio_shortcode_overrideу самому плеєрі не використовується.


За замовчуванням: ”

Про аудіо шорткоди в WordPress

З версії 3.6 WordPress можна використовувати аудіо шорткод. Виглядає так: . Можна вказати параметри шорткоду, так:

Або так – включимо зациклювання:

Або так, для резерву, коли браузер може не розуміти зазначений формат файлу, вкажемо 3 різних формати:

Або “вбудовування” (embeds)

А можна записати ще простіше, через так зване вбудовування (embeds) аудіо файл можна вставити просто написавши посилання на нього на окремому рядку. WP автоматично знайде та обробить таке посилання, при цьому не потрібні жодні шорткоди. Тобто. можна написати так:

Текст до



Текст після

Всі ці варіанти додавання аудіо запис, обробляються в результаті функцією wp_audio_shortcode() .

Приклади

0

#1 Виведемо плеєр аудіо файлу у будь-якому місці шаблону

$ args = array (
	'src' => 'http://example.com/my.mp3',
	'loop' => false,
	'autoplay' => false,
	'preload' => 'none'
);

echo wp_audio_shortcode( $args );

Виведе HTML код

<!--[if lt IE 9]><script>document.createElement('audio');</script><![endif]-->
<audio class="wp-audio-shortcode" id="audio-7-1" preload="none" style="width: 100%; visibility: hidden;" controls="controls">
	<source type="audio/mpeg" src="http://example.com/my.mp3?_=1" />
	<a href="http://example.com/my.mp3">http://example.com/my.mp3</a>
</audio>

У браузері отримаємо такий плеєр, де можна включити та послухати вказаний файл:

Аудіо шоткод WOrdPress

0

#2 Хукwp_audio_shortcode_override

Роботу функції можна повністю перевизначити через хук wp_audio_shortcode_override. Точно так само, як це робиться з шорткодом галереї в прикладі функції gallery_shortcode()

add_filter('wp_audio_shortcode_override', 'my_audio_shortcode', 10, 4);
function my_audio_shortcode( $empty_str, $attr, $content, $instance ){
	// Перевіряємо, що нам потрібно, якщо підходить, то перевизначаємо всю функцію wp_audio_shortcode
	if( $attr['autoplay'] ){
		// Тут пишемо свій код виведення плеєра, для музики з авто-відтворенням
	}
	else
		return '';
}

список змін

З версії 3.6.0Введено.

wp audio shortcode WP 6.0.2

function wp_audio_shortcode( $attr, $content = '' ) {
	$post_id = get_post()? get_the_ID() : 0;

	static $instance = 0;
	$instance++;

	/**
	 * Filters default audio shortcode output.
	 *
	 * Якщо filtred 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 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, true ) ) {
			return sprintf( '<a class="wp-embedded-audio" href="%s">%s</a>', esc_url( $atts['src'] ), esc_html( $atts['src'] )));
		}

		$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 використаний для audio shortcode.
	 *
	 * @ Since 3.6.0
	 *
	 * @param string $library Media library використаний для звукового 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 class attribute for audio shortcode output container.
	 *
	 * @ Since 3.6.0
	 * @since 4.9.0 The `$atts` parameter was added.
	 *
	 * @param string $class CSS class або list of space-separated classes.
	 * @param array $atts Array of audio shortcode attributes.
	 */
	$atts['class'] = apply_filters( 'wp_audio_shortcode_class', $atts['class'], $atts );

	$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'],
	);

	// Ці ones повинні бути омитані глибоко, якщо вони є бланк.
	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">', implode( ' ', $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 використаний для звукового shortcode.
	 */
	return apply_filters( 'wp_audio_shortcode', $html, $atts, $audio, $post_id, $library);
}

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *