Использование звукового шорткода для URL-адресов.mp3 со строкой запроса
Я пытаюсь использовать аудио-шорткод с аудиофайлом со строкой запроса в конце URL-адреса, и это не сработает. Причина в том, что я хотел бы использовать истекающие подписанные URL-адреса с Amazon S3.
Если я использую URL-адрес, например
В качестве src при вызове wp_audio_shortcode()
он работает просто отлично. Но если я использую URL-адрес, например
Затем wp_audio_shortcode()
просто выдает HTML-ссылку вместо встроенного аудио и кода проигрывателя. В моих тестах кажется, что для шорткода требуется расширение файла .mp3 в конце URL-адреса. Есть ли способ заставить короткий код работать со строкой запроса в URL-адресе?
Какие-либо другие решения можно предложить?
1 answers
Проблема:
Проблема, похоже, в том, что wp_check_filetype()
не распознает mp3
файлы с параметрами GET
.
Возможные обходные пути:
Насколько я вижу, у вас есть два варианта:
1) Переопределите звуковой шорткод с помощью фильтра wp_audio_shortcode_override
.
2) или разрешите любые расширения аудио через фильтр wp_audio_extensions
.
Вот пример того, как вы можете реализовать последний вариант:
/**
* Allow unrecognize audio sources hosted on 'bucketname.s3.amazonaws.com'.
*
* @see http://wordpress.stackexchange.com/a/152352/26350
*/
add_filter( 'wp_audio_shortcode_override',
function( $html, $atts )
{
if( 'bucketname.s3.amazonaws.com' === parse_url( $atts['src'], PHP_URL_HOST ) )
{
add_filter( 'wp_audio_extensions', 'wpse_152316_wp_audio_extensions' );
}
return $html;
}
, PHP_INT_MAX, 2 );
Где
function wpse_152316_wp_audio_extensions( $ext )
{
remove_filter( current_filter(), __FUNCTION__ );
$ext[] = '';
return $ext;
}
Итак просто чтобы объяснить, что здесь происходит:
Прямо перед вызовом wp_get_audio_extensions()
внутри функции wp_audio_shortcode()
мы "перехватываем" крючок wp_audio_shortcode_override
, чтобы разрешить пустое расширение аудиофайла.
Причина этого заключается в том, что проверка wp_check_filetype()
возвращает пустую строку для нераспознанных расширений файлов. Затем мы убедимся, что это изменение применяется только в том случае, если источник звука размещен на bucketname.s3.amazonaws.com
.
Я надеюсь, что это поможет.