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?
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 );
}