El hook wp_login no funciona

3 jun 2013, 02:16:16
Vistas: 22.6K
Votos: 1

He pasado mucho tiempo buscando una solución a mi problema, sin éxito. Su ayuda es invaluable.

Estoy creando un sistema simplificado de insignias. El objetivo es incrementar el número de insignias para un usuario si realiza ciertas acciones en el sitio web. Por ejemplo, por cada publicación, le otorgo al usuario una insignia.

Para hacerlo, opté por usar metadatos de usuario y el hook action publish_post.

En mi functions.php, puse:

function publish_badge($post_ID) {

   global $current_user; 
   get_currentuserinfo();

   $number_of_badges = get_user_meta($current_user->id,'user_number_of_badges',true);
   $number_of_badges = $number_of_badges + 1;
   update_user_meta($current_user->id, 'user_number_of_badges', $number_of_badges);
   return $post_ID;             
}
add_action('publish_post', 'publish_badge');

Soy nuevo usando los hooks de acción de WordPress, y pasé mucho tiempo tratando de hacerlo funcionar. Sé que me estoy perdiendo algo, ya que para otros hooks, el problema persiste.

Tengo en total 4 acciones para las cuales quiero dar más insignias a los usuarios: publish_post, edit_post, wp_login, comment_post.

Su ayuda habitual siempre es apreciada.

Edición:

Encontré la solución para todos los hooks excepto wp_login. De hecho, estoy usando tipos de publicación personalizados, así que debo cambiar mis nombres de hooks. En otras palabras, publish_post se convertirá en publish_cpt.

¿Qué hacer con wp_login?

    function login_badge($user_login) {
    global $current_user; 

    get_currentuserinfo();
 $number_of_badges= get_user_meta($current_user->id,'user_number_of_badges2',true);
   $number_of_badges= $number_of_badges +5;

  update_user_meta($current_user->id, 'user_number_of_badges2', $number_of_badges);

    }


add_action('wp_login', 'login_badge');

gracias por su tiempo.

0
Todas las respuestas a la pregunta 2
4

Probablemente estés encontrando un problema con $current_user->id que está obsoleto desde WordPress 2.1. Específicamente, obtengo este aviso en el registro de errores:

Aviso: WP_User->id fue llamado con un argumento que está obsoleto desde la versión 2.1! Usa WP_User->ID en su lugar. en /xxx/xxx/public_html/wordpress/wp-includes/functions.php en la línea 2923.

Usa $current_user->ID en su lugar. O también puedes usar get_current_user_id():

add_action( 'wp_login', 'login_badge' );
function login_badge( $user_login ) {
    if ( get_user_meta( get_current_user_id(), 'user_number_of_badges2', true ) )
        update_user_meta( get_current_user_id(), 'user_number_of_badges2', get_user_meta( get_current_user_id(), 'user_number_of_badges2', true ) + 5 );
}

Edición: También prueba:

function login_badge( $login ) {

    $user = get_userdatabylogin($login);

    $number_of_badges= get_user_meta($user->ID,'user_number_of_badges2',true);
    $number_of_badges= $number_of_badges + 30;

    update_user_meta($user->ID, 'user_number_of_badges2', $number_of_badges);
}
add_action( 'wp_login', 'login_badge' );
3 jun 2013 06:21:10
Comentarios

Te agradezco mucho por tu información. Desafortunadamente, todavía no puedo encontrar una solución para mi hook de inicio de sesión. Volveré aquí para compartir la solución cuando la encuentre. +1

whiteletters in blankpapers whiteletters in blankpapers
5 jun 2013 09:06:39

Tanto la solución anterior como cambiar tu código para usar $current_user->ID funcionaron bien para mí en un sitio web de prueba. ¿Cómo estás probando el éxito o el fracaso?

Charles Clarkson Charles Clarkson
5 jun 2013 13:58:31

Estoy de acuerdo contigo, tu enfoque es lógico, pero para mí no funciona incluso después de hacer el cambio de agregar 2 parámetros a update_user_meta (get_current_user_id() y 'user_number_of_badges2'). Solo pusiste un parámetro en tu solución (mira mi edición). De todos modos gracias, también compartí la solución para mi caso arriba de tu respuesta

whiteletters in blankpapers whiteletters in blankpapers
8 jun 2013 18:36:36

Tienes razón. Tienes que vigilarme como un halcón. Gracias por compartir tu solución. Estoy seguro de que algún lector futuro apreciará tu esfuerzo.

Charles Clarkson Charles Clarkson
8 jun 2013 19:54:05
0

Solo para agregar a este hilo - puede ayudar a alguien. En nuestro caso, estábamos haciendo referencia a funciones de un plugin en otro.

El problema era el orden de carga de los plugins. Un plugin se cargaba con 'plugins_loaded' y el otro con 'init'. La solución fue cargar y priorizar correctamente el orden de carga usando el mismo hook.

1 feb 2023 16:40:51