web-dev-qa-db-fra.com

Balises audio autour de l'URL MP3 dans le contenu

J'ai un lecteur audio qui utilise la syntaxe suivante pour afficher son lecteur:

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

Le problème, c’est que je suis à peu près sûr de pouvoir montrer à l’utilisateur comment copier l’URL et le coller dans le message, mais comment puis-je rechercher dans le contenu un lien .mp3 et ensuite mettre [audio src=" devant celui-ci et "] à la fin de ça?

2
Josh Rodgers

Filtrez the_content et/ou the_excerpt et remplacez les URL audio qui ne sont pas déjà une valeur d'attribut.

Exemple:

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