Passar valor booleano em shortcode

13

Em códigos de acesso do WordPress, como posso passar atributos booleanos?
Os dois [shortcode boolean_attribute="true"] ou [shortcode boolean_attribute=true] estão fornecendo valores de string.

EDITAR

Não haveria nenhum problema para os usuários que sabem o que estão fazendo se eu usar o truque que foi comentado pelo @brasofilo. Mas alguns usuários serão perdidos se derem um atributo false value e receber true value. Então, existe alguma outra solução?

    
por Sodbileg Gansukh 18.10.2013 / 12:32

2 respostas

14

É fácil usar os valores de 0 e 1 e, em seguida, a conversão de tipos de letras dentro da função:

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

mas se você quiser, pode também verificar estritamente por 'false' e atribuí-lo a booleano, desta forma você também pode usar:

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

Então:

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;
}
    
por gmazzap 18.10.2013 / 12:42
24

Como uma extensão para @ G.M. resposta (que é a única maneira possível de fazer isso), aqui está uma versão ligeiramente encurtada / embelezada e estendida (que eu pessoalmente prefiro):

Variante abreviada / embelezada

É suficiente fazer uma boolean para verificar o valor contido. Se for true , o resultado será (bool) true , senão será falso. Isso produz um caso true , todo o resto false result.

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

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

Variante Estendida / segura para o usuário

O motivo pelo qual eu prefiro essa versão é que ela permite que o usuário digite on/yes/1 como um alias para true . Isso reduz a chance de erros do usuário quando o usuário não lembra qual era o valor real de 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 );
}

Notas adicionais:

1) Sempre passe o terceiro argumento para shortcode_atts() . Além disso, o filtro de atributos de código curto é impossível de segmentar.

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

2) Nunca use extract() . Até o núcleo quer reduzir essas chamadas. É igualmente pior para global variables, pois os IDEs não têm a chance de resolver o conteúdo extraído e enviarão mensagens de falha.

    
por kaiser 18.10.2013 / 13:10