Boole değerini kısa kodda geçirme


16

WordPress kısa kodlarında, boole özelliklerini nasıl iletebilirim?
Her ikisi de [shortcode boolean_attribute="true"]veya[shortcode boolean_attribute=true] dize değerleri veriyor.

DÜZENLE

@Brasofilo tarafından yorumlanan hileyi kullanırsam ne yaptıklarını bilen kullanıcılar için sorun olmaz. Ancak bazı kullanıcılar özellik falsedeğeri verir ve değer alırsa kaybolur true. Peki başka bir çözüm var mı?


2
Sadece özelliği geçmeyin false, aksi takdirde sahip olacaksınız true.
brasofilo

Teşekkürler @brasofilo. Ama başka bir çözüm var mı? Bazı kullanıcıların bir özellik "yanlış" değeri verir, ancak "gerçek" değer alırsanız kaybolacak düşünüyorum.
Sodbileg Gansukh

Yanıtlar:


14

Kullanımı kolay 0ve 1değerler ve sonra fonksiyonun içinde daktilo ile:

[shortcode boolean_attribute='1'] veya [shortcode boolean_attribute='0']

ancak isterseniz kesinlikle 'false'boolean'ı kontrol edebilir ve atayabilirsiniz, bu şekilde şunları da kullanabilirsiniz:

[shortcode boolean_attribute='false'] veya [shortcode boolean_attribute='true']

Sonra:

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


Bu harika bir cevap. Ancak, kullanıcıların doğru veya yanlış seçim yapmasının harika olacağını düşündüm. Üzgünüz, cevabınızı kabul edildiği gibi kabul edemiyorum.
Sodbileg Gansukh

@SodbilegGansukh bu kod ile de çalışır 'true've'false'
gmazzap

@toscho Ben sadece kopyalayıp kodeksinden yapıştırılan ;)
gmazzap

3
@SodbilegGansukh Tüm bağımsız değişkenler dize olarak iletilir, çünkü bunlar yalnızca dize olarak girilebilir (yazılabilir). Bu cevaptan başka bir yol yok. Dizesiz bir boole değeri yazmaya çalışın…
fuxia

28

@GM cevabının bir uzantısı olarak (bunu yapmanın tek olası yolu), burada biraz kısaltılmış / güzelleştirilmiş ve genişletilmiş bir versiyon (kişisel olarak tercih ederim):

Kısaltılmış / Güzelleştirilmiş varyant

booleanİçerilen değer için bir kontrol yapmak yeterlidir . Eğer öyleyse true, sonuç olur (bool) true, yoksa yanlış olur. Bu bir vaka üretir true, her şey falsesonuçlanır.

add_shortcode( 'shortcodeWPSE', 'wpse119294ShortcodeCbA' );
function wpse119294ShortcodeCbA( $atts ) {
    $args = shortcode_atts( array(
        'boolAttr' => 'true'
    ), $atts, 'shortcodeWPSE' );

    $args['boolAttr'] = 'true' === $args['boolAttr'];
}

Genişletilmiş / Kullanıcı güvenli varyant

Bu sürümü tercih etmemin nedeni, kullanıcının on/yes/1bir takma ad olarak yazmasına izin vermesidir true. Bu, kullanıcı gerçek değerinin ne olduğunu hatırlamadığında kullanıcı hatası olasılığını azaltır 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 );
}

Ek Notlar:

1) Her zaman için 3. argümanını iletin shortcode_atts(). Başka kısa kod öznitelikleri filtresini hedeflemek imkansızdır.

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

2) Asla kullanmayın extract(). Çekirdek bile bu çağrıları azaltmak istiyor. globalIDE'ler çıkarılan içeriği çözme şansına sahip olmadığından ve hata mesajlarını atacağından, değişkenler için aynı derecede daha kötüdür .


1
Vay canına, bu harika bir cevap. Çok teşekkür ederim. Keşke cevabına oy vermek için yeterli itibara sahip olsaydım. Tavsiyeniz için çok teşekkür ederim.
Sodbileg Gansukh

1
Senin adına oy verdim, Sodbileg. :)
Dero

wp_validate_boolean()4.0.0 veya sonraki sürümlerde işlev, boole değerlerinin doğrulanmasında yardımcı olur. İşlev Referansı developer.wordpress.org/reference/functions/wp_validate_boolean
Aamer Shahzad

@AamerShahzad Bu, filter_var( $var, FILTER_VALIDATE_BOOLEAN ).bu işlevin docblock'unun bile belirttiği (imho gereksiz yere eklenmiş) bir alternatiftir .
kaiser

@kaiser bu sadece bilgi içindir.
Aamer Shahzad

0

İşte gmazzap'ın cevabına dayanan daha kısa basit bir versiyon:

'1' veya '0' kullanın, sonra çift vuruşla "!!" "true / falsey" değerini boole eşdeğeri olarak değiştiren

bunun "doğru" ve "yanlış" dizelerle ÇALIŞMADIĞINI, yalnızca "1" ve "0" ile çalışmadığını unutmayın

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.