it-swarm.com.de

Eingabe mit Leerzeichen in Shortcode-Attributen, die durch Standardwerte überschrieben wurden

die Frage scheint der hier gestellten ähnlich zu sein , aber die Antwort ist einen anderen Weg gegangen.

Ziemlich genau, wenn ein Benutzer ein Shortcode-Attribut mit einem Leerzeichen eingibt, wird es durch den Standardwert überschrieben, und ich kann nicht herausfinden, wie dieses Verhalten beendet werden kann (keine Erwähnung in den WP Shortcode-API-Dokumenten).

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

Ich scheine eine Ausgabe von zu bekommen

<div class="image-accordion'>
  <h2>
     Accordion Title
  </h2>
</div>

Jedes Mal...

Wenn ich ein print_r auf $ atts starte, bekomme ich

Array ( [0] => 
/> [2] => title="We're [3] => Awesome")

Dies ist eine Neuinstallation von WP, bei der keine Plugins mit dem Standarddesign ausgeführt werden

(habe zB auch den Code gekürzt)

1
csilk

Sieht so aus, als hätte ich den Shortcode selbst mehrfach vergeben, WordPress war kein Fan.

Danke @bonger

1
csilk

Das Problem scheint in der Ausgabepufferung zu liegen. Warum nicht einfach Zuweisungsoperatoren verwenden?

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