web-dev-qa-db-fra.com

Entrée avec des espaces dans les attributs Shortcode écrasés par défaut

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)

1
csilk

On dirait que j'appliquais plusieurs lignes sur le shortcode lui-même, wordpress n'était pas un fan.

Merci @bonger

1
csilk

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' );
0
Abhik