WordPressのショートコードで、ブール属性を渡すにはどうすればいいですか?[shortcode boolean_attribute="true"]
と[shortcode boolean_attribute=true]
の両方が文字列値を与えています。
編集
@brasofiloによってコメントされたトリックを使用すれば、自分が何をしているのかを知っているユーザーにとって問題はありません。しかし、属性false
の値を与えてtrue
の値を受け取ると、一部のユーザーは迷子になります。他に解決策はありますか?
0
と1
の値を使い、関数内で型キャストするのは簡単です:
[shortcode boolean_attribute='1']
または[shortcode boolean_attribute='0']
ただし、必要に応じて'false'
を厳密にチェックしてブール値に代入することもできます。この方法では、次のようにも使用できます。
[shortcode boolean_attribute='false']
または[shortcode boolean_attribute='true']
その後:
add_shortcode( 'shortcode', 'shortcode_cb' );
function shortcode_cb( $atts ) {
extract( shortcode_atts( array(
'boolean_attribute' => 1
), $atts ) );
if ( $boolean_attribute === 'false' ) $boolean_attribute = false; // just to be sure...
$boolean_attribute = (bool) $boolean_attribute;
}
@ G.Mの拡張として。答え(これをするための唯一の可能な方法です)、ここでは少し短くした/美しくした、そして拡張版(私は個人的に好みます):
含まれている値をboolean
チェックするだけで十分です。もしそれがtrue
なら、結果は(bool) true
になり、そうでなければfalseになります。これは1つのケースtrue
を生成し、それ以外はfalse
をもたらします。
add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
$args = shortcode_atts( array(
'boolAttr' => 'true'
), $atts, 'shortcodeWPSE' );
$args['boolAttr'] = 'true' === $args['boolAttr'];
}
私がこのバージョンを好む理由は、ユーザーがtrue
のエイリアスとしてon/yes/1
を入力できることです。これにより、ユーザーがtrue
の実際の値を覚えていない場合にユーザーエラーが発生する可能性が低くなります。
add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
$args = shortcode_atts( array(
'boolAttr' => 'true'
), $atts, 'shortcodeWPSE' );
$args['boolAttr'] = filter_var( $args['boolAttr'], FILTER_VALIDATE_BOOLEAN );
}
1)shortcode_atts()
には常に3番目の引数を渡します。そうでなければ、ショートコード属性フィルターはターゲットにすることが不可能です。
// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );
2)extract()
を使わないでください。コアでさえもこれらの呼び出しを減らすことを望んでいます。 IDEは抽出された内容を解決する機会がなく、失敗のメッセージを投げるので、変数global
も同様に悪いです。