web-dev-qa-db-fra.com

Legacy Audio Shortcode

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.

  1. Créez un script qui transforme ce shortcode audio au format plus récent [audio src = "http: // localhost: 8888/lusa/audio/1310seg02.mp3] https: //codex.wordpress. org/Audio_Shortcode .
  2. Trouvez le plugin qui a créé le shortcode de cette façon.
  3. ?

/ ======== 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 ); 
2
Celso

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 );
}
1
jgraup

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é .

1
gmazzap