Hook wp_login non funzionante

3 giu 2013, 02:16:16
Visualizzazioni: 22.6K
Voti: 1

Ho speso molto tempo cercando una soluzione al mio problema, ma invano. Il vostro aiuto è prezioso.

Sto creando un sistema di badge semplificato. L'obiettivo è incrementare il numero di badge per un utente se esegue alcune azioni sul sito web. Per esempio, per ogni post pubblicato, assegno all'utente un badge.

Per fare ciò, ho optato per i meta dati utente e l'utilizzo dell'hook publish_post.

Nel mio functions.php, ho inserito:

function publish_badge($post_ID) {

   global $current_user; 
   get_currentuserinfo();

   // Ottiene il numero attuale di badge
   $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');

Sono nuovo nell'utilizzo degli action hook di WordPress e ho speso molto tempo per farlo funzionare. So che mi sta sfuggendo qualcosa, dato che per altri hook il problema persiste.

Da notare che ho in totale 4 azioni per le quali voglio assegnare più badge agli utenti: publish_post, edit_post, wp_login, comment_post.

Il vostro consueto aiuto è sempre apprezzato.

Modifica:

Ho trovato la soluzione per tutti gli hook eccetto wp_login. In effetti, sto utilizzando custom post type quindi devo cambiare i nomi dei miei hook. In altre parole, publish_post diventerà publish_cpt.

Cosa fare con wp_login??

    function login_badge($user_login) {
    global $current_user; 

    get_currentuserinfo();
    // Ottiene il numero di badge dal meta utente
    $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');

grazie per il vostro tempo.

0
Tutte le risposte alla domanda 2
4

Probabilmente ti stai imbattendo in un problema con $current_user->id che è stato deprecato da WordPress 2.1. In particolare, riceverai questo avviso nel log degli errori:

Notice: WP_User->id è stato chiamato con un argomento deprecato dalla versione 2.1! Utilizza invece WP_User->ID. in /xxx/xxx/public_html/wordpress/wp-includes/functions.php alla riga 2923.

Utilizza invece $current_user->ID. Oppure potresti usare 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 );
}

Modifica: Prova anche:

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 giu 2013 06:21:10
Commenti

Ti ringrazio molto per le tue informazioni. Purtroppo, non riesco ancora a trovare una soluzione per il mio hook di login. Tornerò qui a fornire la soluzione quando la troverò. +1

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

Sia la soluzione sopra menzionata che la modifica del tuo codice per utilizzare $current_user->ID hanno funzionato bene per me su un sito web di test. Come stai verificando il successo o il fallimento?

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

Concordo con te, il tuo approccio è logico, per me non funziona anche se ho apportato la modifica di aggiungere 2 parametri a update_user_meta (get_current_user_id() e 'user_number_of_badges2'). Hai inserito nella tua soluzione solo un parametro (guarda la mia modifica). grazie comunque, ho anche fornito la soluzione per il mio caso sopra la tua risposta

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

Hai ragione. Devi tenermi d'occhio come un falco. Grazie per aver condiviso la tua soluzione. Sono sicuro che qualche lettore futuro apprezzerà il tuo sforzo.

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

Per aggiungere a questa discussione - potrebbe essere utile a qualcuno. Nel nostro caso, stavamo facendo riferimento a funzioni di un plugin all'interno di un altro.

Il problema era l'ordine di caricamento dei plugin. Un plugin veniva caricato con 'plugins_loaded' mentre l'altro con 'init'. La soluzione è stata caricare correttamente e prioritizzare l'ordine di caricamento utilizzando lo stesso hook.

1 feb 2023 16:40:51