Berikan nilai boolean dalam kode pendek


16

Di WordPress shortcode, bagaimana saya bisa melewatkan atribut boolean?
Keduanya [shortcode boolean_attribute="true"]atau [shortcode boolean_attribute=true]memberikan nilai string.

EDIT

Tidak akan ada masalah bagi pengguna yang tahu apa yang mereka lakukan jika saya menggunakan trik yang dikomentari oleh @brasofilo. Tetapi beberapa pengguna akan tersesat jika mereka memberikan falsenilai atribut dan menerima truenilai. Jadi, apakah ada solusi lain?


2
Cukup jangan lulus atribut dan Anda akan memiliki false, jika tidak true.
— brasofilo

Terima kasih @brasofilo. Tetapi apakah ada solusi lain? Saya pikir beberapa pengguna akan tersesat jika mereka memberikan nilai atribut "false", tetapi mereka akan mendapatkan nilai "true".
— Sodbileg Gansukh

Jawaban:


14

Mudah digunakan 0dan 1menghargai dan kemudian mengetik di dalam fungsi:

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

tetapi jika mau, Anda juga dapat dengan ketat memeriksa 'false'dan menetapkannya ke boolean, dengan cara ini Anda juga dapat menggunakan:

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

Kemudian:

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


Itu jawaban yang bagus. Tapi saya pikir akan lebih bagus jika pengguna memiliki pilihan benar atau salah. Maaf saya tidak dapat menerima jawaban Anda sebagaimana diterima.
— Sodbileg Gansukh

@ SodbilegGansukh kode ini juga berfungsi dengan 'true'dan'false'
— gmazzap

@toscho Saya baru saja menyalin dan menempel dari codex ;)
— gmazzap

3
@SodbilegGansukh Semua argumen dilewatkan sebagai string, karena mereka dapat dimasukkan (diketik) sebagai string saja. Tidak ada cara lain selain jawaban ini. Cobalah untuk mengetik nilai boolean tanpa string…
— fuxia

28

Sebagai ekstensi untuk jawaban @GM (yang merupakan satu-satunya cara yang mungkin untuk melakukan ini), inilah versi yang sedikit disingkat / dipercantik dan dan diperpanjang (yang secara pribadi saya sukai):

Varian yang dipersingkat / Dipercantik

Cukup dengan booleanmemeriksa nilai yang terkandung. Jika ya true, hasilnya akan (bool) true, kalau tidak akan salah. Ini menghasilkan satu kasus true, semua falsehasil lainnya .

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

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

Varian Diperpanjang / Aman bagi pengguna

Alasan mengapa saya lebih suka versi ini adalah karena ini memungkinkan pengguna untuk mengetik on/yes/1sebagai alias untuk true. Ini mengurangi kemungkinan kesalahan pengguna ketika pengguna tidak ingat apa nilai sebenarnya untuk trueitu.

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

    $args['boolAttr'] = filter_var( $args['boolAttr'], FILTER_VALIDATE_BOOLEAN );
}

Catatan tambahan:

1) Selalu berikan argumen ke-3 untuk shortcode_atts(). Jika tidak, filter atribut shortcode tidak dapat ditargetkan.

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

2) Jangan pernah gunakan extract(). Bahkan inti ingin mengurangi panggilan itu. Ini sama buruknya dengan globalvariabel, karena IDE tidak memiliki kesempatan untuk menyelesaikan konten yang diekstraksi dan akan melempar pesan kegagalan.


1
Wow, itu jawaban yang bagus. Terima kasih banyak. Saya harap saya punya cukup reputasi untuk memilih jawaban Anda. Dan terima kasih banyak atas saran Anda.
— Sodbileg Gansukh

1
Saya memilih atas nama Anda, Sodbileg. :)
— Dero

wp_validate_boolean()fungsi di WordPress 4.0.0 atau lebih tinggi sangat membantu dalam memvalidasi nilai boolean. Referensi Fungsi developer.wordpress.org/reference/functions/wp_validate_boolean
— Aamer Shahzad

@AamerShahzad Ini adalah (imho yang tidak perlu ditambahkan) alternatif untuk filter_var( $var, FILTER_VALIDATE_BOOLEAN )., apa yang bahkan menyatakan docblock dari fungsi ini sendiri.
— kaiser

@kaiser ini hanya untuk informasi.
— Aamer Shahzad

0

Di sini versi sederhana yang lebih pendek, yang didasarkan pada jawaban gmazzap:

Gunakan '1' atau '0', lalu gunakan double bang "!!" yang mengubah nilai "truthy / falsey" menjadi setara boolean

perhatikan ini TIDAK akan bekerja dengan string "benar" dan "salah", hanya "1" dan "0"

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.