Не работает хук действия wp_login
Я потратил много времени в поисках решения моей проблемы, но безрезультатно. Ваша помощь неоценима.
Я создаю упрощенную систему значков. Цель состоит в том, чтобы увеличивать количество значков для пользователя, если он выполняет определенные действия на сайте. Например, за каждую опубликованную запись я даю пользователю один значок.
Для этого я выбрал метаданные пользователя и использование хука действия 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');
спасибо за ваше время.
Вероятно, вы столкнулись с проблемой, связанной с тем, что $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' );
Большое спасибо за вашу информацию. К сожалению, я до сих пор не могу найти решение для моего хука входа. Я вернусь сюда, чтобы предоставить решение, когда найду его. +1
whiteletters in blankpapers
Оба решения выше и изменение вашего кода на использование $current_user->ID сработали нормально для меня на тестовом сайте. Как вы проверяете успех или неудачу?
Charles Clarkson
Я согласен с вами, ваш подход логичен, но у меня это не работает, даже если я внес изменение, добавив 2 параметра в update_user_meta (get_current_user_id() и 'user_number_of_badges2'). Вы указали в своем решении только один параметр (посмотрите мое редактирование). В любом случае спасибо, я также привел решение для своего случая выше вашего ответа
whiteletters in blankpapers
Просто добавлю к этой теме - возможно, это кому-то поможет. В нашем случае мы использовали функции одного плагина в другом.
Проблема была в порядке загрузки плагинов. Один плагин загружался через хук 'plugins_loaded', а другой через 'init'. Решение заключалось в правильной настройке порядка загрузки с использованием одного и того же хука.