Hook-ul wp_login nu funcționează în WordPress

3 iun. 2013, 02:16:16
Vizualizări: 22.6K
Voturi: 1

Am petrecut mult timp căutând o soluție la problema mea, dar în zadar. Ajutorul vostru este neprețuit.

Creez un sistem simplificat de badge-uri. Scopul este de a incrementa numărul de badge-uri pentru un utilizator dacă acesta efectuează anumite acțiuni pe site. De exemplu, pentru fiecare articol publicat, ofer utilizatorului un badge.

Pentru aceasta, am optat pentru meta date utilizator și folosirea hook-ului publish_post.

În fișierul meu functions.php, am pus:

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');

Sunt nou în utilizarea hook-urilor WordPress și am petrecut mult timp încercând să le fac să funcționeze. Știu că îmi scapă ceva, deoarece pentru alte hook-uri, problema persistă.

Menționez că am în total 4 acțiuni pentru care vreau să ofer utilizatorilor mai multe badge-uri: publish_post, edit_post, wp_login, comment_post.

Ajutorul vostru este întotdeauna apreciat.

Editare:

Am găsit soluția pentru toate hook-urile cu excepția wp_login. De fapt, folosesc tipuri de postări personalizate, așa că trebuie să schimb numele hook-urilor mele. Cu alte cuvinte, publish_post va deveni publish_cpt.

Ce să fac cu 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');

Mulțumesc pentru timpul acordat.

0
Toate răspunsurile la întrebare 2
4

Probabil întâmpinați o problemă cu $current_user->id care este învechită începând cu WordPress 2.1. Mai exact, primesc această notificare în jurnalul de erori:

Notificare: WP_User->id a fost apelat cu un argument care este învechit începând cu versiunea 2.1! Utilizați WP_User->ID în schimb. în /xxx/xxx/public_html/wordpress/wp-includes/functions.php la linia 2923.

Folosiți $current_user->ID în schimb. Sau puteți utiliza 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 );
}

Editare: Încercați și:

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 iun. 2013 06:21:10
Comentarii

Vă mulțumesc foarte mult pentru informații. Din păcate, încă nu am găsit soluția pentru hook-ul meu de login. Voi reveni aici cu soluția când o voi găsi. +1

whiteletters in blankpapers whiteletters in blankpapers
5 iun. 2013 09:06:39

Atât soluția de mai sus, cât și modificarea codului tău pentru a folosi $current_user->ID au funcționat bine pentru mine pe un site de test. Cum verifici succesul sau eșecul?

Charles Clarkson Charles Clarkson
5 iun. 2013 13:58:31

Sunt de acord cu tine, abordarea ta este logică, pentru mine nu funcționează chiar dacă am făcut modificarea de a adăuga 2 parametri la update_user_meta (get_current_user_id() și 'user_number_of_badges2'). Tu ai pus în soluția ta doar un parametru (vezi ediția mea). Oricum, mulțumesc, am dat și eu soluția pentru cazul meu deasupra răspunsului tău

whiteletters in blankpapers whiteletters in blankpapers
8 iun. 2013 18:36:36

Ai dreptate. Trebuie să mă urmărești ca un șoim. Mulțumesc pentru soluția pe care ai împărtășit-o. Sunt sigur că vreun cititor din viitor va aprecia efortul tău.

Charles Clarkson Charles Clarkson
8 iun. 2013 19:54:05
0

Doar pentru a adăuga la acest subiect - poate ajuta pe cineva. În cazul nostru, foloseam funcții dintr-un plugin în altul.

Problema era ordinea de încărcare a plugin-urilor. Un plugin era încărcat cu 'plugins_loaded' iar celălalt cu 'init'. Soluția a fost să încărcăm și să prioritizăm corect ordinea de încărcare folosind același hook.

1 feb. 2023 16:40:51