HTMLエレメントの中には、<input disabled />
や<video autoplay />
などの無価値な属性を受け入れるものがあります
デフォルトで自動再生を無効にしたい(=属性をまったく省略したい)が、オプションで有効にしたいというショートコードでこのケースをどのように処理するのですか。
考えられるシナリオ
// [video]
<video>
// [video autoplay]
<video autoplay="autoplay"> // using XML syntax
// [video autoplay="autoplay"]
<video autoplay="autoplay">
// [video autoplay="false"]
<video autoplay="false"> // value doesn't matter - video will still auto play
これを行うための標準的な方法は、のようには役に立ちません。デフォルト値は使いたくありません。
// http://codex.wordpress.org/Shortcode_API#Attributes
function my_shortcode_handler( $atts, $content = null ) {
extract( shortcode_atts( array(
'attr_1' => 'attribute 1 default',
'attr_2' => 'attribute 2 default',
// ...etc
), $atts ) );
}
私は間違いなくこの問題に関する私自身のハックを見つけることができます、しかしこれをするためのかなりの方法があるなら私は興味があります。
ショートコード値として0
および1
を使用し、それを使用してHTML属性を表示または非表示にします。
要素input
と属性required
を使った例:
function input_shortcode( $atts )
{
$values = shortcode_atts(
array (
'type' => 'text',
'value' => '',
'name' => '',
'id' => '',
'required' => 0,
),
$atts
);
$values = array_map( 'esc_attr', $values );
return sprintf(
'<input type="%1$s"%2$s%3$s%4$s%5$s>',
$values[ 'type' ], // 1
'' === $values[ 'name' ] ? '' : ' ' . $values[ 'name' ], // 2
'' === $values[ 'value' ] ? '' : ' ' . $values[ 'value' ], // 3
'' === $values[ 'id' ] ? '' : ' ' . $values[ 'id' ], // 4
0 === $values[ 'required' ] ? '' : ' required' // 5
);
}
extract()
を使用しないでください。今まで.
名前のない属性は、まだショートコードハンドラに渡されています。名前でアクセスすることはできません。
数字キーで属性をループしてautoplay
値の存在をチェックすることで、[video autoplay]
バリアントを実現できます。
類似の質問を参照してください - ショートコードだが等号なし?