Intereting Posts
Сортировка пользовательских типов сообщений по категориям и пользовательской таксономии на одной странице? все переключатели tincymce при обновлении страницы после перехода с html на текст в пользовательском метабоксе значение не сохраняется в форме при динамическом создании ввода Как создать эскизы с фиксированной шириной, поэтому все они будут иметь одинаковую ширину? Вторая внутренняя вставка навигации Фильтровать сообщения от автора, выбранные на странице Попытка загрузить различные сили для страницы 404.php Показать страницу ошибки 404, если значение переменной публичного запроса не существует? Асинхронная электронная почта wp_mail () заголовки multipart / alternative Способ отправки нескольких значений для столбца в MySQL? Установить роль пользователя в зависимости от возраста от Facebook Вход в систему – WordPress как заменить get_template_part ('loop', 'tag') на явную версию? Создание пользовательского меню для настраиваемой темы Удалить ссылки со страницы входа

Как добавить атрибуты данных в короткий код WordPress

Я пытаюсь интегрировать fullpage.js в тему wordpress. Чтобы звук продолжал воспроизводиться между разделами, мне нужно добавить данные атрибута data-keepplaying в <audio> сгенерированный wordpress.

Тем не менее, я не уверен, как подключиться к встроенному короткому коду, чтобы добавить атрибут данных. В принципе, я ищу способ изменить вывод короткого кода аудио, чтобы я мог сделать это (или что-то подобное) в моем шаблоне:

 <?php echo do_shortcode('"&apos;.$audio_url.&apos;"'); ?> 

Они могут быть более скупым способом достичь того, чего вы хотите, может быть, с jQuery или более сильно настроенной версией кода, но просто поддерживая основные функции WordPress, вы можете попробовать следующий подход, в котором используется фильтр wp_audio_shortcode_override .

Я протестировал версию ниже, используя is_page() для основного условного. Вы заменили бы имя файла шаблона страницы в условном get_page_template_slug() используя get_page_template_slug() как показано:

 /** * Use audio shortcode override filter selectively * to replace built-in shortcode function with modified version * on pages using the specified template */ add_filter( 'wp_audio_shortcode_override', 'add_keep_playing_att_on_these', 10, 4 ); function add_keep_playing_att_on_these($override, $attr, $content, $instance) { if ( 'page-audio.php' === get_page_template_slug( get_the_ID() ) ) { /** * EXCEPT AS NOTED * FROM HERE UP TO THE RETURN STATEMENTS * function mostly re-produces audio shortcode function from media.php * I removed the html filter from the original code, but may return later and put it back! **/ $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 ) ) { 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 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"; } /**************************************************************** * ADD data-keepplaying ATTRIBUTE TO AUDIO HTML * THIS IS THE THE ONLY SIGNIFICANT ALTERATION IN THE BASIC AUDIO SHORTCODE ***************************************************************/ $html .= sprintf( '<audio %s controls="controls" data-keepplaying>', 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>'; return $html ; } else { return $override ; } }