web-dev-qa-db-fra.com

wpautop () quand les attributs shortcode sont sur de nouvelles lignes, cassent le tableau args

J'ai une balise de shortcode personnalisée avec quelques attributs, et j'aimerais pouvoir afficher ses attributs sur de nouvelles lignes - pour le rendre plus lisible par les éditeurs de contenu:

[component
    attr1 ="value1"
    attr2 ="value of the second one"
    attr3 ="another"
    attr4 ="value"
    ...
    attrN ="valueN"]

La raison derrière cette exigence est que quelques attributs peuvent avoir un contenu assez détaillé. Malheureusement, wpautop() ajoute un balisage supplémentaire désagréable qui casse le tableau $atts comme ceci (en utilisant php print_r($atts)):

Array ( [0] => attr1 [1] => ="value1"
/> [3] => attr2 = [4] => "value [5] => of [6] => the [7] => second [8] => one"
/> [10] => "" //...and more like this)

J'ai essayé avec les attributs inline :

[component attr1 ="value1" attr2 ="value of the second one" ="value"... attrN ="valueN"]

et la sortie est comme prévu:

Array ( [attr1] => value1 [attr2] => value of the second one [attr3] => //...and so on)

y a-t-il un moyen d'avoir les attributs voulus et d'éviter ce balisage supplémentaire qui casse le tableau $args?

la fonction que j'utilise pour enregistrer le shortcode [component] extrait les valeurs comme ceci:

function component_func( $atts, $content = null ) {
extract( shortcode_atts( array(
    'attr1' => 'attr1',
    'attr2' => 'attr2',
    'attr3' => 'attr3',
    ), $atts ) );
    // more code
}

J'utilise ensuite ces variables extraites pour remplir un autre tableau

3
Luca

Ok, je n’ai jamais vu de shortcode réalisé de cette façon, j’ai rassemblé un peu de code pour tester votre scénario. Et j'obtiens les mêmes résultats avec un code qui fonctionne parfaitement avec le format standard .

Format standard de shortcode

[nom abrégé1 = "valeur1" nom2 = "valeur2"]

Je ne crois pas que cela soit le résultat de wpautop (), mais de la manière dont les attributs de shortcode sont analysés. Regardez l'exemple ci-dessus et vous verrez que le seul espace non cité est utilisé pour séparer le shortcode et les paires nom => (c.-à-d. Aucun espace entre le nom et le '=', un seul espace entre chaque nom => valeur paire). Dans ce contexte, le <br/> est également considéré comme un espace.

Je n'ai pas exploré les composants internes de l'analyse de shortcode, donc je ne peux pas proposer de suggestion sur un crochet ou un filtre qui pourrait aider. Peut-être qu'un autre utilisateur ici a des idées à ce sujet.

Si vous devez formater votre shortcode comme vous l'avez, je pense que vous allez devoir écrire un code personnalisé pour analyser le tableau transmis à votre fonction de shortcode. Toutes les valeurs sont présentes, vous devriez donc pouvoir les reconstituer.

Une autre option pourrait être de fournir un formulaire à l'utilisateur final pour qu'il entre les valeurs, puis renseigne le shortcode dans votre contenu.

Une mise à jour de ma réponse

Quelque chose dans ma réponse m'ennuyait alors j'ai regardé à nouveau. Et vous avez raison, wpautop () a un effet sur la sortie de la page. Mais je ne pense pas que ce soit la cause de vos problèmes de shortcode.

1
Steve