web-dev-qa-db-ja.com

ショートコード属性のスペースをデフォルトで上書きして入力

質問はここで尋ねられたもの と似ているようです が、答えは別の道をたどりました。

ユーザーがスペースでショートコード属性を入力すると、デフォルト値で上書きされてしまい、この動作を止める方法がわかりません(WPショートコードAPIのドキュメントには何も記載されていません)。

ショアコード:

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

私はの出力を取得するようだ

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

毎回...

$ attsでprint_rを実行すると、

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

これはWPの新規インストールで、デフォルトのテーマで実行されているプラ​​グインはありません。

(例:コードも削減しました)

1
csilk

私はショートコード自体をマルチラインしていたようです、ワードプレスはファンではありませんでした。

ありがとう@bonger

1
csilk

問題は出力バッファリングにあるようです。代入演算子を使わないのはなぜですか?

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