Referencias a variables y arrays en PHP

Posted: Mayo 27th, 2010 | Author: | Filed under: PHP | 3 Comments »

PHP sigue muchas de la reglas de C, por lo que no podía faltar la referencia. Veamos un ejemplo ilustrativo, tenemos un array de elementos y queremos recorrerlo realizando modificaciones a medida que lo hacemos. La función preferida para esto es foreach, pero al hacerlo trabajamos sobre una copia de la variable, por lo que al salir del bucle nuestros cambios desaparecen.

Un primer intento podria ser este:

if (!empty($data[‘noticias’])) { foreach ($data[‘noticias’] as $each) {

$each[‘fechaactual’] = date(“Y-m-d h:i:s”);

} }

Para solucionar esto usamos una referencia:

if (!empty($data[‘noticias’])) { foreach ($data[‘noticias’] as $k=>$v) {

/* Creamos la referencia en la posición actual */
$pointer =& $data[‘noticias’][$k];

/* Hacemos cambios en el arreglo original */
$pointer[‘fechaactual’] = date(“Y-m-d h:i:s”);

} }


Campos adicionales personalizados para usuarios en WordPress

Posted: Mayo 19th, 2010 | Author: | Filed under: PHP | Comentarios desactivados en Campos adicionales personalizados para usuarios en WordPress

Suiza Traders gestores Broker para fondos de inversion y FOREX.

Muchas veces en nuestro sitio queremos poder agregar campos personalizados para los usuarios. Ya sea un número de facturación, direcciones, tipo de cliente o una cuenta de twitter.

A pesar de que WordPress no trae aún en forma nativa la gestión de campos personalizados para usuarios (en la versión actual, 2.9.2), podemos hacer una pequeña modificación en nuestro archivo functions.php del theme.

Abrimos el archivo mencionado y simplemente agregamos el siguiente código:

<?php
/* Con este bloque mostramos en el admin el campo adicional en el admin */

add_action( ‘show_user_profile’, ‘my_show_extra_profile_fields’ );
add_action( ‘edit_user_profile’, ‘my_show_extra_profile_fields’ );

function my_show_extra_profile_fields( $user ) { ?>

<h3>Datos adicionales</h3>

<table>

<tr>
<th><label for=”escliente”>Es cliente?</label></th>

<td>
Si <input type=”radio” name=”escliente” id=”escliente” value=”si” <?php if (esc_attr( get_the_author_meta( ‘escliente’, $user->ID )) == “si”) { ?> checked=”checked” <? } ?> >
No <input type=”radio” name=”escliente” id=”escliente” value=”no” <?php if (esc_attr( get_the_author_meta( ‘escliente’, $user->ID )) == “no”) { ?> checked=”checked” <? } ?> >
</td>
</tr>

</table>
<?php } ?>
<?php
/* Este bloque actualiza el campo al guardar los cambios */

add_action( ‘personal_options_update’, ‘my_save_extra_profile_fields’ );
add_action( ‘edit_user_profile_update’, ‘my_save_extra_profile_fields’ );

function my_save_extra_profile_fields( $user_id ) {

if ( !current_user_can( ‘edit_user’, $user_id ) )
return false;

/* Actualizamos cada campo adicional con su ID */
update_usermeta( $user_id, ‘escliente’, $_POST[‘escliente’] );
}
?>

Luego para ver en el sitio público los campos adicionales podemos hacerlo de la siguiente forma:

<?php if ( get_the_author_meta( ‘escliente’ ) ) { ?>
<p> Es cliente: <?php the_author_meta( ‘escliente’ ); ?></p>
<?php }  ?>