Не работает хук действия wp_login

3 июн. 2013 г., 02:16:16
Просмотры: 22.6K
Голосов: 1

Я потратил много времени в поисках решения моей проблемы, но безрезультатно. Ваша помощь неоценима.

Я создаю упрощенную систему значков. Цель состоит в том, чтобы увеличивать количество значков для пользователя, если он выполняет определенные действия на сайте. Например, за каждую опубликованную запись я даю пользователю один значок.

Для этого я выбрал метаданные пользователя и использование хука действия publish_post.

В моем functions.php я поместил:

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

Я новичок в использовании хуков действий WordPress, и я потратил много времени, пытаясь заставить это работать. Я знаю, что упускаю что-то, поскольку для других хуков проблема остается.

Отмечу, что у меня всего 4 действия, за которые я хочу давать пользователям больше значков: publish_post, edit_post, wp_login, comment_post.

Ваша обычная помощь всегда ценится.

Редактирование:

Я нашел решение для всех хуков, кроме wp_login. Фактически, я использую пользовательские типы записей, поэтому мне нужно изменить названия моих хуков. Другими словами, publish_post станет publish_cpt.

Что делать с 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');

спасибо за ваше время.

0
Все ответы на вопрос 2
4

Вероятно, вы столкнулись с проблемой, связанной с тем, что $current_user->id устарел, начиная с WordPress 2.1. В частности, в логах ошибок появляется следующее уведомление:

Notice: WP_User->id был вызван с аргументом, который устарел начиная с версии 2.1! Используйте WP_User->ID вместо этого. в /xxx/xxx/public_html/wordpress/wp-includes/functions.php на строке 2923.

Вместо этого используйте $current_user->ID. Или вы можете воспользоваться функцией 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 );
}

Примечание: Также попробуйте:

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 июн. 2013 г. 06:21:10
Комментарии

Большое спасибо за вашу информацию. К сожалению, я до сих пор не могу найти решение для моего хука входа. Я вернусь сюда, чтобы предоставить решение, когда найду его. +1

whiteletters in blankpapers whiteletters in blankpapers
5 июн. 2013 г. 09:06:39

Оба решения выше и изменение вашего кода на использование $current_user->ID сработали нормально для меня на тестовом сайте. Как вы проверяете успех или неудачу?

Charles Clarkson Charles Clarkson
5 июн. 2013 г. 13:58:31

Я согласен с вами, ваш подход логичен, но у меня это не работает, даже если я внес изменение, добавив 2 параметра в update_user_meta (get_current_user_id() и 'user_number_of_badges2'). Вы указали в своем решении только один параметр (посмотрите мое редактирование). В любом случае спасибо, я также привел решение для своего случая выше вашего ответа

whiteletters in blankpapers whiteletters in blankpapers
8 июн. 2013 г. 18:36:36

Вы правы. Вам нужно следить за мной, как ястреб. Спасибо, что поделились своим решением. Уверен, что будущие читатели оценят ваши усилия.

Charles Clarkson Charles Clarkson
8 июн. 2013 г. 19:54:05
0

Просто добавлю к этой теме - возможно, это кому-то поможет. В нашем случае мы использовали функции одного плагина в другом.

Проблема была в порядке загрузки плагинов. Один плагин загружался через хук 'plugins_loaded', а другой через 'init'. Решение заключалось в правильной настройке порядка загрузки с использованием одного и того же хука.

1 февр. 2023 г. 16:40:51