Использование звукового шорткода для URL-адресов.mp3 со строкой запроса


Я пытаюсь использовать аудио-шорткод с аудиофайлом со строкой запроса в конце URL-адреса, и это не сработает. Причина в том, что я хотел бы использовать истекающие подписанные URL-адреса с Amazon S3.

Если я использую URL-адрес, например

Http://bucketname.s3.amazonaws.com/audiofile.mp3

В качестве src при вызове wp_audio_shortcode() он работает просто отлично. Но если я использую URL-адрес, например

Http://bucketname.s3.amazonaws.com/audiofile.mp3?AWSAccessKeyId=XXXXXXXXXXXX&Expires=1234567890&Signature=XXXXXXXXXXXXXXXXXX

Затем wp_audio_shortcode() просто выдает HTML-ссылку вместо встроенного аудио и кода проигрывателя. В моих тестах кажется, что для шорткода требуется расширение файла .mp3 в конце URL-адреса. Есть ли способ заставить короткий код работать со строкой запроса в URL-адресе?

Какие-либо другие решения можно предложить?

Author: Pieter Goosen, 2014-07-01

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.

Я надеюсь, что это поможет.

 2
Author: birgire, 2014-07-01 13:13:15