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é.
player="default"
dans un shortcode audio fonctionnent.Pour cela, je suis parti d'un exemple de plugin posté ici: Est-il possible de contrôler la largeur du lecteur audio Wordpress?
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?
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.