2011-05-26 16 views
6

¿Cómo creo un nuevo campo de nombre de usuario con valores de selección desplegables?Wordpress: cree un nuevo campo de nombre de usuario para usuarios

Im quiero crear una declaración condicional para todos los usuarios con un cierto valor del nuevo campo personalizado que quiero.

Por ejemplo,

El nuevo campo sería: Aprobado El desplegables valores son: Sí y No

La sentencia condicional reconocerán todos los usuarios con el valor del campo de Aprobado Sí. Luego publicará un código.

Im trabajando con la función wp_get_current_user(), que hace exactamente lo que necesito, pero solo necesito un nuevo campo de usuario personalizado. En el ejemplo, el nuevo campo usermeta sería "artwork_approved".

Ejemplo:

wp_get_current_user(); 
if ($current_user->artwork_approved == 'Yes'){ 
    echo 'Thank you for approving your artwork!'; 
} 

No parece haber ningún plug-in para esto y yo realmente necesita esta característica. Realmente agradecería algunos consejos sobre cómo crear una nueva usermeta con opciones desplegables.

* ACTUALIZACIÓN:

utilicé el Registro Plus Redux para crear un nuevo campo UserMeta, llamado "gráfico aprobado." Lo hice una opción desplegable, con las opciones "No" y "Sí". La opción No está establecida como predeterminada.

Esto creó el campo de usuario "Material de trabajo aprobado". Administro cuentas de usuario y selecciono Sí o No. Ahora, con este nuevo campo de nombre de usuario, estoy usando una función que debería verificar si el usuario actual tiene el Material gráfico aprobado con el valor Sí. Entonces se supone que muestra un cierto código.

Aquí es la sentencia if Im usar con el nuevo campo UserMeta:

<?php global $current_user; get_currentuserinfo(); if ($current_user->artwork_approved == 'Yes') { ?> 

echo 'Your artwork is approved'; 

<?php } else { ?>   

echo 'Your artwork is not approved'; 

<?php } ?> 

Pero lo que sucede es que no es el reconocimiento de la primera parte de la sentencia if. Si inicio sesión en cualquier cuenta con la ilustración aprobada, la declaración if solo muestra la parte "else" incluso si tengo la opción "Sí" para Artwork Approved.

No sé por qué no se reconoce la opción Sí, como lo tengo en la declaración.

Gracias

Respuesta

16

Se puede crear un sencillo plugin para enganchar en las acciones de perfil de usuario y añadir un nuevo campo.

Para agregar el campo al formulario, puede enganchar en las acciones show_user_profile y edit_user_profile y generar el campo de formulario HTML. A continuación se usa una casilla de verificación en lugar de un menú desplegable.

add_action('show_user_profile', 'my_user_profile_edit_action'); 
add_action('edit_user_profile', 'my_user_profile_edit_action'); 
function my_user_profile_edit_action($user) { 
    $checked = (isset($user->artwork_approved) && $user->artwork_approved) ? ' checked="checked"' : ''; 
?> 
    <h3>Other</h3> 
    <label for="artwork_approved"> 
    <input name="artwork_approved" type="checkbox" id="artwork_approved" value="1"<?php echo $checked; ?>> 
    Artwork approved 
    </label> 
<?php 
} 

Luego hay que enganchar en las acciones personal_options_update y edit_user_profile_update, obtener el valor de su campo y salva esto como meta de usuario.

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', isset($_POST['artwork_approved'])); 
} 

Su condición sería la siguiente.

if (get_user_meta($current_user->ID, 'artwork_approved', true)) { 
+0

Gracias Richard. Encontré una solución que funciona de alguna manera ... Estoy usando el complemento Register Plus Redux, que puede crear el nuevo usermeta. He actualizado mi publicación con más información. Apreciaría su opinión. ¡Muchas gracias! – gdinari

+0

Gracias Richard su solución funcionó como un encanto. El único problema que veo es que cuando marque la casilla para la aprobación del usuario en la sección de administración, después de actualizar la página, la casilla no se marcará. Si uno de nuestros empleados mira a ese cliente, no sabría si está aprobado o no. Entonces, si quisiera desmarcar (no aprobar) la caja, ¿cómo lo haría? Gracias – gdinari

+0

Supongo que necesito crear esto como un plugin como el que sugirió ... Agregué el primer bloque de código que me diste a la página php de mis miembros administradores, donde cargué la foto para su aprobación. El segundo y último bloque que agregué al frente al frente del sitio web, donde los clientes verán. después de mirar mi base de datos, no pude encontrar ninguna referencia a "artwork_approved". Supongo que no se ingresó en el archivo db porque no me registré correctamente. – gdinari

1

¿No debería el segundo bloque de código de lectura:

add_action('personal_options_update', 'my_user_profile_update_action'); 
add_action('edit_user_profile_update', 'my_user_profile_update_action'); 
function my_user_profile_update_action($user_id) { 
    update_user_meta($user_id, 'artwork_approved', $_POST['artwork_approved']); 
} 

El valor guardado por update_user_meta es $_POST['artwork_approved'] no isset($_POST['artwork_approved']).

+0

Buen punto, aunque sugeriría desinfectar los datos de esta manera: 'update_user_meta ($ user_id, 'artwork_approved', isset ($ _ POST ['artwork_approved'])? 1: 0);' – helgatheviking

+1

Como está utilizando una casilla de verificación 'artwork_approved' no aparecerá en la matriz $ _POST si está desmarcada. –

Cuestiones relacionadas