Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在新用户注册后更新用户元数据_Php_Wordpress_Woocommerce_Metadata_User Data - Fatal编程技术网

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的详细信息