Passa il valore booleano in shortcode


16

Nei codici brevi di WordPress, come posso passare attributi booleani?
Entrambi [shortcode boolean_attribute="true"]o [shortcode boolean_attribute=true]stanno fornendo valori stringa.

MODIFICARE

Non ci sarebbero problemi per gli utenti che sanno cosa stanno facendo se uso il trucco che è stato commentato da @brasofilo. Ma alcuni utenti si perderanno se danno un falsevalore di attributo e ricevono truevalore. Quindi c'è qualche altra soluzione?


2
Semplicemente non passare l'attributo e avrai false, altrimenti true.
brasofilo,

Grazie @brasofilo. Ma c'è qualche altra soluzione? Penso che alcuni utenti si perderanno se danno un valore "falso" all'attributo, ma otterranno un valore "vero".
Sodbileg Gansukh,

Risposte:


14

È facile da usare 0e 1valori e quindi typecasting all'interno della funzione:

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

ma se vuoi puoi anche controllare 'false'e assegnarlo rigorosamente a booleano, in questo modo puoi anche usare:

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

Poi:

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


Questa è un'ottima risposta. Ma ho pensato che sarebbe bello se gli utenti avessero una scelta vera o falsa. Spiacente, non posso accettare la tua risposta come accettata.
Sodbileg Gansukh,

@SodbilegGansukh questo codice funziona anche con 'true'e'false'
gmazzap

@toscho Ho appena copiato e incollato dal codice ;)
gmazzap

3
@SodbilegGansukh Tutti gli argomenti vengono passati come stringhe, poiché possono essere immessi (digitati) solo come stringhe. Non c'è altro modo che questa risposta. Prova a digitare un valore booleano senza stringhe ...
fuxia

28

Come estensione alla risposta di @GM (che è l'unico modo possibile per farlo), ecco una versione leggermente abbreviata / abbellita e una versione estesa (che preferisco personalmente):

Variante abbreviata / abbellita

È sufficiente fare un booleancontrollo per il valore contenuto. Se lo è true, il risultato sarà (bool) true, altrimenti sarà falso. Questo produce un caso true, tutto il resto falserisulta.

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

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

Variante estesa / sicura per l'utente

Il motivo per cui preferisco questa versione è che consente all'utente di digitare on/yes/1come alias per true. Ciò riduce la possibilità di errori dell'utente quando l'utente non ricorda quale fosse il valore effettivo 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 );
}

Note aggiuntive:

1) Passa sempre il terzo argomento per shortcode_atts(). Altrimenti il ​​filtro degli attributi dello shortcode è impossibile da targetare.

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

2) Non usare mai extract(). Anche il core vuole ridurre quelle chiamate. È altrettanto peggio per le globalvariabili, poiché gli IDE non hanno la possibilità di risolvere i contenuti estratti e genereranno messaggi di errore.


1
Wow, questa è un'ottima risposta. Grazie mille. Vorrei avere abbastanza reputazione per votare la tua risposta. E grazie mille per il tuo consiglio.
Sodbileg Gansukh,

1
Ho votato a tuo nome, Sodbileg. :)
Dero,

wp_validate_boolean()la funzione in WordPress 4.0.0 o versione successiva è utile per convalidare i valori booleani. Riferimenti alle funzioni developer.wordpress.org/reference/functions/wp_validate_boolean
Aamer Shahzad

@AamerShahzad Questa è un'alternativa (imho inutilmente aggiunta) a filter_var( $var, FILTER_VALIDATE_BOOLEAN ).ciò che persino il blocco di documenti di questa stessa funzione afferma.
Kaiser,

@kaiser questo è solo per informazione.
Aamer Shahzad,

0

Ecco una versione semplice più breve, basata sulla risposta di gmazzap:

Usa '1' o '0', quindi esegui il cast usando un doppio botto "!!" che cambia un valore di "verità / falsità" nel suo equivalente booleano

nota che questo NON funzionerà con le stringhe "true" e "false", solo "1" e "0"

[myshortcode myvar="0"]

myshortcodefunction( $args )
{
   $myvar = !! $args['myvar'];
   var_dump($myvar); // prints bool(false)
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.