web-dev-qa-db-ja.com

コンテンツ内のMP3 URLを囲むオーディオタグ

私はオーディオプレーヤーを持っていますが、プレーヤーを表示するのに次の構文を使います。

[audio src="http://somedomain.com/wp-content/uploads/2013/01/songtitle.mp3"]

問題は、URLをコピーして投稿に貼り付ける方法をユーザーに示すことは確実だが、どうやって.mp3リンクのコンテンツを検索し、その前に[audio src="を付けて最後に"]を置くことができるかということです。それ?

2
Josh Rodgers

the_content on /またはthe_excerptをフィルタリングして、まだ属性値ではないオーディオURLを置き換えます。

例:

add_filter( 'the_content', 'wpse_82336_audio_url_to_shortcode', 1 );
add_filter( 'the_excerpt', 'wpse_82336_audio_url_to_shortcode', 1 );

function wpse_82336_audio_url_to_shortcode( $content )
{
    # See http://en.wikipedia.org/wiki/Audio_file_format
    # Adjust the list to your needs
    $suffixes = array (
        '3gp', 'aa3', 'aac', 'aiff', 'ape', 'at3', 'au',  'flac', 'm4a', 'm4b',
        'm4p', 'm4r', 'm4v', 'mpc',  'mp3', 'mp4', 'mpp', 'oga',  'ogg', 'oma',
        'pcm', 'tta', 'wav', 'wma',  'wv',
    );

    $formats = join( '|', $suffixes );
    $regex   = '~
    (([^"\'])|^)            # start of string or attribute delimiter -> match 1
    (https?                 # http or https
        ://                 # separator
        .+/                 # domain plus /
        .+                  # file name at least one character
        \.                  # a dot
        (' . $formats . ')  # file suffixes
    )                       # complete URL -> match 3
    (([^"\'])|$)?           # end of string or attribute delimiter -> match 5
    ~imUx';                 # case insensitive, multi-line, ungreedy, commented

    return preg_replace( $regex, '\1[audio src="\3"]\5', $content );
}
6
fuxia