J'ai récemment refait un site créé à l'origine en 2011. Bien sûr, il y avait quelques gros problèmes de développement et l'un d'entre eux est l'utilisation d'un ancien shortcode audio:
[audio: http: // localhost: 8888/lusa/audio/1310seg02.mp3]
Je n'ai vu aucune documentation du shortcode audio Wordpress natif utilisant un colon. Je n'ai pas non plus été en mesure de trouver un plugin qui l'utilise de cette manière.
Est-ce que quelqu'un sait comment je peux faire fonctionner ce shortcode? Je crois que mes options sont.
/ ======== Progrès ======== /
@ gmazzap m'a mis sur la bonne voie! Le problème est qu'avec le hook shortcode_atts_audio, la variable $ atts ne génère pas de chaînes en dehors des attributs prédéfinis (src, loop, autoplay, preload.) Après quelques recherches, j'ai découvert que je pouvais utiliser wp_audio_shortcode_override pour accéder à mon URL. C'est ce que je fais dans le code ci-dessous. Mais maintenant, j'ai du mal à transmettre cet attribut dans le shortcode et à le sortir.
function legacy_audio_shortcode_converter( $html, $attr ) {
$colon_src = $attr[0]; //get the url string with the colon included.
$attr['src'] = substr($colon_src, 1); //filter out the colon
$new_audio_src = $attr['src']; //save the url as the official audio src
var_dump($new_audio_src); //this is currently outputing the exact url I need but not sure how to make sure the player shows up with this new src.
}
add_filter( 'wp_audio_shortcode_override', 'legacy_audio_shortcode_converter', 10, 2 );
Si votre seul problème est que le format est incorrect, activez-le the_content
avec la version correcte.
Contenu non local:
[audio:http://www.soundhelix.com/examples/mp3/SoundHelix-Song-7.mp3]
Placer dans un plugin ou functions.php
// hook earlier than 10
add_filter('the_content', 'wpse_20160110_the_content_fix_audio', 0);
function wpse_20160110_the_content_fix_audio($content){
return str_replace ( '[audio:', '[audio src=', $content );
}
Je pense que vous pouvez utiliser le crochet de filtre 'shortcode_atts_audio'
pour convertir les arguments sous la forme appropriée et laisser le gestionnaire de shortcode audio par défaut le restituer.
En fait, avec un shortcode comme [audio:http://localhost:8888/lusa/audio/1310seg02.mp3]
, le gestionnaire de shortcode sera appelé avec un tableau d’arguments
array(0 => ':http://localhost:8888/lusa/audio/1310seg02.mp3');
Où le tableau d'arguments formatés approprié devrait être
array('src' => 'http://localhost:8888/lusa/audio/1310seg02.mp3');
Alors tu peux faire:
add_filter( 'shortcode_atts_audio', function(array $atts) {
if (
empty($atts['src'])
&& ! empty($atts[0])
&& filter_var(ltrim($atts[0], ':'), FILTER_VALIDATE_URL)
) {
$atts['src'] = ltrim($atts[0], ':');
}
return $atts;
} );
De cette manière, le gestionnaire de shortcode audio par défaut devrait être capable de restituer le shortcode.
Non testé .