Pasar valor booleano en shortcode

13

En los códigos cortos de WordPress, ¿cómo puedo pasar atributos booleanos?
Tanto [shortcode boolean_attribute="true"] como [shortcode boolean_attribute=true] dan valores de cadena.

EDIT

No habría ningún problema para los usuarios que saben lo que están haciendo si utilizo el truco comentado por @brasofilo. Pero algunos usuarios se perderán si asignan un atributo false valor y reciben true valor. Entonces, ¿hay alguna otra solución?

    
pregunta Sodbileg Gansukh 18.10.2013 - 12:32

2 respuestas

14

Es fácil de usar los valores de 0 y 1 y luego se encasilla dentro de la función:

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

pero si lo desea, también puede verificar estrictamente 'false' y asignarlo a boolean, de esta manera también puede usar:

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

Entonces:

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

Como una extensión a @ G.M. Respuesta (que es la única forma posible de hacer esto), aquí hay una versión ligeramente reducida / mejorada y una versión ampliada (que yo personalmente prefiero):

Variante reducida / embellecida

Es suficiente hacer una verificación boolean para el valor contenido. Si es true , el resultado será (bool) true , de lo contrario será falso. Esto produce un caso true , todo lo demás false resultado.

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

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

Variante extendida / segura para el usuario

La razón por la que prefiero esta versión es que le permite al usuario escribir on/yes/1 como un alias para true . Esto reduce la posibilidad de errores de usuario cuando el usuario no recuerda cuál fue el valor real para 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 adicionales:

1) Siempre pase el tercer argumento para shortcode_atts() . De lo contrario, el filtro de atributos de código corto es imposible de orientar.

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

2) Nunca use extract() . Incluso el núcleo quiere reducir esas llamadas. Es igualmente peor que las variables global , ya que los IDE no tienen la oportunidad de resolver los contenidos extraídos y emiten mensajes de error.

    
respondido por el kaiser 18.10.2013 - 13:10

Lea otras preguntas en las etiquetas