ショートコードでブール値を渡す


16

WordPressショートコードで、ブール属性を渡すにはどうすればよいですか?またはの
両方が文字列値を提供しています。[shortcode boolean_attribute="true"][shortcode boolean_attribute=true]

編集

@brasofiloによってコメントされたトリックを使用すれば、自分が何をしているのかを知っているユーザーには問題はありません。ただし、一部のユーザーは、属性false値を指定して値を受け取ると失われtrueます。他の解決策はありますか?


2
単純に属性を渡さないと、あなたは持っているだろうfalseそれ以外の場合は、true
ブラソフィロ

ありがとう@brasofilo。しかし、他の解決策はありますか?一部のユーザーは、属性に「false」値を指定すると失われますが、「true」値を取得します。
ソドビレグガンスク

回答:


14

使いやすく01値を入力し、関数内で型キャストします。

[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;
}


それは素晴らしい答えです。しかし、ユーザーに正しい選択か間違った選択があれば素晴らしいと思いました。申し訳ありませんが、受け入れられたとおりに回答を受け入れることはできません。
ソドビレグガンスク

@SodbilegGansukhこのコードはしても動作します'true''false'
gmazzap

@toscho コーデックスからコピーして貼り付けたところです;)
gmazzap

3
@SodbilegGansukh文字列としてのみ入力(入力)できるため、すべての引数は文字列として渡されます。この答え以外に方法はありません。文字列のないブール値を入力してみてください…
fuxia

28

@GM回答の拡張(これが唯一の可能な方法です)として、ここに少し短縮/美化された拡張バージョン(個人的には好みです)があります。

短縮/美化バリアント

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'];
}

拡張/ユーザーセーフバリアント

私がこのバージョンを好む理由は、ユーザーがon/yes/1のエイリアスとして入力できるようにするためtrueです。これにより、ユーザーが実際の値が何であったかを覚えていない場合にユーザーエラーが発生する可能性が低くなります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)常に3番目の引数を渡しますshortcode_atts()。それ以外の場合、ショートコード属性フィルターはターゲットにできません。

// The var in the filter name refers to the 3rd argument.
apply_filters( "shortcode_atts_{$shortcode}", $out, $pairs, $atts );

2)を使用しないでくださいextract()。コアでさえ、これらの呼び出しを減らしたいと考えています。globalIDEは抽出されたコンテンツを解決する機会がなく、失敗メッセージをスローするため、変数に対しても同様に悪いです。


1
うわー、それは素晴らしい答えです。どうもありがとうございます。あなたの答えに賛成票を投じるのに十分な評判があればいいのに。アドバイスありがとうございます。
ソドビレグガンスク

1
Sodbileg、私はあなたに代わって投票しました。:)
デロ

wp_validate_boolean()WordPress 4.0.0以降の関数は、ブール値の検証に役立ちます。関数リファレンスdeveloper.wordpress.org/reference/functions/wp_validate_boolean
アーマーシャーザド

@AamerShahzadこれは、filter_var( $var, FILTER_VALIDATE_BOOLEAN ).この関数のdocblock自体が示すものの、(不必要に追加された)代替です。
カイザー

@kaiserこれは情報提供のみを目的としています。
アーマーシャーザド

0

ここで、gmazzapの答えに基づいた、より短い単純なバージョン:

「1」または「0」を使用し、ダブルバン「!!」を使用してキャストします これは「真/偽」の値をそれに相当するブール値に変更します

これは「true」と「false」の文字列では機能せず、「1」と「0」のみが機能することに注意してください。

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.