web-dev-qa-db-fra.com

Erreur lors de la substitution d'une sortie HTML en shortcode audio

Le contexte

J'ai une fonction qui annule le rendu HTML en shortcode audio, grâce à un hook WordPress:

wp_audio_shortcode_override

Je l'ai utilisé de cette façon dans un plugin OOP:

add_filter( 'wp_audio_shortcode_override' , array( $this, 'wp_audio_shortcode_override' ), 10, 2 );

Afin d'éviter que tous les codes abrégés HTML ne soient remplacés, je souhaite créer un attribut personnalisé:

player="default"

Dans la mesure où je peux lire dans la documentation et le code source, si je renvoie une chaîne vide '', le remplacement devrait être désactivé. J'ai donc écrit ceci au début de ma fonction de rendu:

public function wp_audio_shortcode_override( $html, $attr ) {

    $html = ''; // This is the value to disable the shortcode override

    if ( isset( $attr['player'] ) ) {
        if( $attr['player'] === 'default' )
            var_dump( $html );
            return $html;
    } 
    // After that, some code to fill the $html with thing to render,
    //   according to the shortcode attributes values

La prochaine partie de la fonction est comment le shortcode doit être remplacé.

Résultats

  • Le remplacement du code court sans conditions fonctionne
  • L'ajout de la condition dans la fonction et l'écriture de l'attribut de shortcode correspondant player="default" dans un shortcode audio fonctionnent.
  • Ajouter la même valeur d'attribut de shortcode à tous les shortcodes audio d'une publication fonctionne.
  • Avoir des shortcodes audio avec l'attribut et d'autres sans sur le même post ne fonctionne pas .

Reproduire

Pour cela, je suis parti d'un exemple de plugin posté ici: Est-il possible de contrôler la largeur du lecteur audio Wordpress?

Assistance

Qu'est-ce que j'ai raté? Pourquoi puis-je désactiver le remplacement sur tous les codes courts, mais pas de manière sélective sur le même message?

2
X-Raym

Cela devrait fonctionner, quel que soit le nombre de balises [audio] que vous avez dans la publication et quels que soient leurs attributs. Mes suppositions sont soit la logique de votre gestionnaire est légèrement désactivée, soit un tiers (c'est-à-dire un plugin) est en train de détourner le comportement du gestionnaire de shortcode par défaut.

Pour tester, supprimez votre code et essayez ce qui suit - il devrait clairement démontrer si (ou pas) le shortcode et le filtre par défaut fonctionnent comme prévu:

function wpse_209708_debug_audio_shortcode( $html, $attr ) {
    if ( ! empty( $attr['player'] ) && $attr['player'] === 'default' )
        $html = '{audio player:default}';
    else
        $html = '{audio player:other}';

    return "<p>$html</p>";
}

add_filter( 'wp_audio_shortcode_override', 'wpse_209708_debug_audio_shortcode', 10, 2 );

Rapportez-le et je mettrai à jour ceci avec une "vraie" réponse.

1
TheDeadMedic