la question semble être similaire à celle posée ici mais la réponse a emprunté un chemin différent.
En gros, si un utilisateur entre un attribut de shortcode avec un espace, il sera écrasé par la valeur par défaut et je ne vois pas comment arrêter ce problème (aucune mention dans les documents WP de l'API Shortcode)
Shorcode:
[imageaccordion title="We're awesome"]Content Here[/imageaccordion]
PHP:
function image_accordion( $atts , $content = null ) {
// Attributes
extract(
shortcode_atts(
array(
'title' => 'Accordion Title',
), $atts , 'imageaccordion'
)
);
// Put It Together
ob_start();
?>
<div class='image-accordion'>
<h2>
<?php echo $title; ?>
</h2>
<?php
$outputbefore = ob_get_clean();
$outputafter = '</div>';
//Return
return $outputbefore . do_shortcode($content) . $outputafter;
}
add_shortcode( 'imageaccordion', 'image_accordion' );
Je semble avoir une sortie de
<div class="image-accordion'>
<h2>
Accordion Title
</h2>
</div>
À chaque fois...
Si je lance un print_r sur $ atts, je reçois
Array ( [0] =>
/> [2] => title="We're [3] => Awesome")
Ceci est sur une nouvelle installation de WP, pas de plugins fonctionnant avec le thème par défaut
(ont également réduit le code, par exemple)
On dirait que j'appliquais plusieurs lignes sur le shortcode lui-même, wordpress n'était pas un fan.
Merci @bonger
Le problème semble être dans la mise en mémoire tampon de sortie. Pourquoi ne pas simplement utiliser des opérateurs d'affectation?
function image_accordion( $atts , $content = null ) {
// Attributes
$args = shortcode_atts( array(
'title' => 'Accordion Title',
), $atts , 'imageaccordion' );
$output = '<div class="image-accordion">';
$output .= '<h2>' . $args['title'] . '</h2>';
$output .= '</div>';
$output .= do_shortcode($content);
return $output;
}
add_shortcode( 'imageaccordion', 'image_accordion' );