Php 在新用户注册后更新用户元数据
我正在尝试在注册后将自定义字段添加到Php 在新用户注册后更新用户元数据,php,wordpress,woocommerce,metadata,user-data,Php,Wordpress,Woocommerce,Metadata,User Data,我正在尝试在注册后将自定义字段添加到WP\u USERMETA表中 add_filter('woocommerce_new_customer_data', 'wc_assign_custom_role', 10, 1); function wc_assign_custom_role($args) { update_user_meta($user_id, 'user_pass2', password_hash($_POST['password'], PASSWORD_DEFAULT));
WP\u USERMETA
表中
add_filter('woocommerce_new_customer_data', 'wc_assign_custom_role', 10, 1);
function wc_assign_custom_role($args) {
update_user_meta($user_id, 'user_pass2', password_hash($_POST['password'], PASSWORD_DEFAULT));
return $args;
}
正如你们所看到的,我试图在散列之前捕获密码,并将其保存在该表中的不同散列格式中
但这并没有增加任何东西
我在wordpress注册钩子user\u register
中测试了同一行代码,它起了作用,但只适用于wordpress注册,不适用于商业
更新
add_filter('woocommerce_new_customer_data', 'wc_assign_custom_role', 10, 1);
function wc_assign_custom_role($args) {
global $current_user;
update_user_meta($current_user->$user_id, 'user_pass2', password_hash($_POST['password'], PASSWORD_DEFAULT));
return $args;
}
还是不行
更新II
function action_woocommerce_created_customer( $customer_id, $new_customer_data, $password_generated ) {
update_user_meta($customer_id, 'user_pass2', password_hash($_POST['password'], PASSWORD_DEFAULT));
};
add_action( 'woocommerce_created_customer', 'action_woocommerce_created_customer', 10, 3 );
这一个创建元数据,但它似乎使用了不同的$\u POST['password']
而不是我输入的密码,所以散列其他内容而不是密码
有什么想法吗???找到了解决方案,我们应该使用
$\u POST['account\u password']
而不是$\u POST['password']
function action_woocommerce_created_customer( $customer_id, $new_customer_data, $password_generated ) {
update_user_meta($customer_id, 'user_pass2', password_hash($_POST['account_password'], PASSWORD_DEFAULT));
};
add_action( 'woocommerce_created_customer', 'action_woocommerce_created_customer', 10, 3 );
查看
woocommerce\u created\u customer
action hook所在的源代码时,可以找到密码$new\u customer\u data['user\u pass']
(请参见答案末尾)
因此,您的代码应该是:
add_action( 'woocommerce_created_customer', 'action_woocommerce_created_customer', 10, 3 );
function action_woocommerce_created_customer( $customer_id, $new_customer_data, $password_generated ) {
update_user_meta($customer_id, 'user_pass2', password_hash($new_customer_data['user_pass'], PASSWORD_DEFAULT));
}
代码进入活动子主题(或活动主题)的function.php文件。它应该会起作用
以下是
wc\u create\u new\u customer()
函数中涉及的相关源代码:
$new_customer_data = apply_filters( 'woocommerce_new_customer_data', array(
'user_login' => $username,
'user_pass' => $password,
'user_email' => $email,
'role' => 'customer',
) );
而
$\u POST['account\u password']
不是必需的,因为它已经存储在$password
变量中。从哪里获取$user\u id
?在我看来,您需要使用woocommerce\u created\u customer
钩子,因为WC会将$customer\u id
传递给您的回调。请检查更新,以了解与用户注册钩子等效的内容是什么?因为在这个钩子中,我可以使用$POST方法获得密码的原始格式。谢谢您提供$new\u customer\u data@LoicTheAztec的详细信息