शोर्ट में बूलियन मान पास करें


16

वर्डप्रेस शॉर्टकोड में, मैं बूलियन विशेषताओं को कैसे पारित कर सकता हूं?
दोनों [shortcode boolean_attribute="true"]या[shortcode boolean_attribute=true] स्ट्रिंग मान दे रहे हैं।

संपादित करें

उन उपयोगकर्ताओं के लिए कोई समस्या नहीं होगी जो जानते हैं कि वे क्या कर रहे हैं यदि मैं उस ट्रिक का उपयोग करता हूं जो @brasofilo द्वारा टिप्पणी की गई थी। लेकिन कुछ उपयोगकर्ता एक विशेषता falseमान देने और trueमूल्य प्राप्त करने पर खो जाएंगे । तो क्या कोई और उपाय है?


2
बस विशेषता पास नहीं है और आप falseअन्यथा होगा true
ब्रासोफिलो

धन्यवाद @brasofilo लेकिन क्या कोई और उपाय है? मुझे लगता है कि कुछ उपयोगकर्ता खो देंगे यदि वे एक विशेषता "गलत" मान देते हैं, लेकिन उन्हें "सही" मान मिलेगा।
सोडाबिलग गानसुख

जवाबों:


14

उपयोग में आसान है 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;
}


यह बहुत अच्छा जवाब है। लेकिन मुझे लगा कि अगर उपयोगकर्ताओं के पास सही या गलत विकल्प होगा तो यह बहुत अच्छा होगा। क्षमा करें, मैं आपके उत्तर को स्वीकार नहीं कर सकता।
सोड्बिलग गानसुख

@SodbilegGansukh इस कोड के साथ भी काम करता है 'true'और'false'
gmazzap

@toscho मैं बस की नकल की और से चिपकाया कोडेक्स ;)
gmazzap

3
@SodbilegGansukh सभी तर्क तार के रूप में पारित किए जाते हैं, क्योंकि उन्हें केवल तार के रूप में दर्ज (टाइप) किया जा सकता है। इस जवाब के अलावा और कोई रास्ता नहीं है। एक stringless बूलियन मान टाइप करने के लिए प्रयास करें ...
FUXIA

28

@GM उत्तर के विस्तार के रूप में (जो कि ऐसा करने का एकमात्र संभव तरीका है), यहां थोड़ा छोटा / सुशोभित और एक विस्तारित संस्करण (जिसे मैं व्यक्तिगत रूप से पसंद करता हूं):

छोटा / सुशोभित संस्करण

यह booleanनिहित मूल्य के लिए एक जांच करने के लिए पर्याप्त है । यदि यह है true, तो परिणाम होगा (bool) true, अन्यथा यह गलत होगा। यह एक मामला पैदा करता है 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()। यहां तक ​​कि कोर उन कॉल्स को कम करना चाहता है। यह globalचर के लिए उतना ही बुरा है , क्योंकि आईडीई निकाले गए सामग्रियों को हल करने का मौका नहीं देता है और विफलता संदेश फेंक देगा।


1
वाह, यह बहुत अच्छा जवाब है। बहुत बहुत धन्यवाद। काश आपके जवाब के लिए मुझे वोट देने की पर्याप्त प्रतिष्ठा होती। और आपकी सलाह के लिए बहुत बहुत धन्यवाद।
सोद्बिलेग गानसुख

1
मैंने आपकी ओर से सोदबिलीग को वोट दिया। :)
Dero

wp_validate_boolean()वर्डप्रेस 4.0.0 या इसके बाद के संस्करण बूलियन मूल्यों को मान्य करने में सहायक है। कार्य संदर्भ developer.wordpress.org/reference/functions/wp_validate_boolean
आमिर शहजाद

@AamerShahzad यह एक (imho अनावश्यक रूप से जोड़ा गया) विकल्प है filter_var( $var, FILTER_VALIDATE_BOOLEAN )., जो इस फ़ंक्शन के डॉकब्लॉक को भी बताता है।
कैसर

@kaiser यह सिर्फ जानकारी के लिए है।
आमेर शहजाद

0

यहाँ एक छोटा सा सरल संस्करण है, जो gmazzap के उत्तर पर निर्माण कर रहा है:

"1 'या' 0 'का प्रयोग करें, फिर एक डबल बैंग का उपयोग करके कास्ट करें" !! " जो इसे "बूली / वैल्यू" मान देता है, यह बूलियन के बराबर है

ध्यान दें कि यह "सही" और "झूठे" तार के साथ काम नहीं करेगा, केवल "1" और "0"

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.