我花了很多时间寻找我的问题的解决方案,但都没有成功。你的帮助是无价的。
我正在创建一个简化的徽章系统。目标是增加用户在网站上执行某些操作时的徽章数量。例如,对于每个发布的帖子,我都会给用户一个徽章。
为此,我选择了用户元数据,并使用publish\\u 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\\u post、edit\\u post、wp\\u login、comment\\u post。
非常感谢您一如既往的帮助。
Edit:
我找到了除了wp\\u登录之外的所有钩子的解决方案,事实上,我正在使用自定义的帖子类型,所以我应该更改我的钩子名称。换句话说,publish\\u post将成为publish\\u cpt。
如何使用wp\\U登录??
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\');
感谢您抽出时间。
最合适的回答,由SO网友:Charles Clarkson 整理而成
你可能遇到了一个问题$current_user->id
自WordPress 2.1以来已被弃用。具体而言,我在错误日志中得到了以下通知:
Notice: 调用WP\\u User->id时使用的参数自版本2.1以来已被弃用!改用WP\\u User->ID。在/xxx/xxx/public\\u html/wordpress/wp中包含/函数。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 );
}
Edit: 还可以尝试:
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\' );