Trabajar con “Checkboxes” y Custom Post Type en WordPress

Con Custom Post Type podemos realizar infinidad de tipos de Posts y recientemente, mientras trabajaba en una aplicación de reportes, tuve que añadir algunos checkboxes donde el cliente pudiera definir algúnas variables que no se podían manejar con input type="select" por ejemplo.

Sin embargo, hay que aplicar un pequeño truco con los checkboxes ya que se debe “rescatar” la variable del $_POST y guardar el valor en otra variable.

Generalmente, si trabajamos con input type="text", textarea o input type="select" podemos guardar las variables de la siguiente manera:

add_action('save_post', 'save_details');
function save_details() {
global $post;
$my_var_1 = "my_var_name";
update_post_meta($post->ID, $my_var_1, $_POST[ $my_var_1 ]);
}

Donde my_var_name es el nombre de la variable enviada por un input y $_POST[ $my_var_1 ] rescata el valor de esa variable.

Ahora, si trabajamos con checkboxes, antes de la función update_post_meta debemos hacer comprobar si el checkbox fué marcado y luego rescatamos la variable. Por ejemplo:

add_action('save_post', 'save_details');
function save_details() {
global $post;
$my_chckbx_name = "option_a";
$my_option_a = 0;
// Pregunto si $my_var_name existe
if( isset( $_POST[ $my_var_name ] ) ) {
// Si existe, le asigno el valor a $my_chckbx
$my_chckbx = $_POST[ $my_var_name ];
// Pregunto si $my_chckbx tiene el valor enviado por el checkbox marcado
if ( $my_chckbx == "ON" ) {
// Si el checkbox fué marcado, le asigno el valor de 1 a la variable $my_option_a y la guardo luego
$my_option_a = 1;
} else { $my_option_a = 0; }
}
update_post_meta($post->ID, $my_chckbx_name, $_POST[ $my_option_a ]);
}

El código para generar el checkbox sería:

<?php function my_checkbox() {
global = $post;
$my_post_metas = get_post_custom( $post->ID );
$my_option = "my_option_a";
$my_checkbox = $my_post_metas[ $the_option ][ 0 ];
$my_vars = array( 0 =&gt; array( $my_option, $my_checkbox, "option a" ) );
// Ahora coloco el checkbox en HTML
<input
type="checkbox"
name="<?php echo $my_vars[ 0 ][ 0 ]; ?>"
value="ON"
<?php if( $my_vars[ 0 ][ 1 ] == 1 ) {
echo 'checked="checked"';
} else { // Do Nothing
} ?> />
<?php } ?>

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s