質問はここで尋ねられたもの と似ているようです が、答えは別の道をたどりました。
ユーザーがスペースでショートコード属性を入力すると、デフォルト値で上書きされてしまい、この動作を止める方法がわかりません(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の新規インストールで、デフォルトのテーマで実行されているプラグインはありません。
(例:コードも削減しました)
私はショートコード自体をマルチラインしていたようです、ワードプレスはファンではありませんでした。
ありがとう@bonger
問題は出力バッファリングにあるようです。代入演算子を使わないのはなぜですか?
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' );