我试图在调用的函数中获取所有用户详细信息(包括WooCommerce元数据)user_register
和profile_update
挂钩。这是简化代码:
function get_all_user_data($user_id) {
$user_data = get_userdata($user_id);
$login = $user_data->user_login;
$b_firstname = get_user_meta($user_id, \'billing_first_name\', true);
}
add_action(\'user_register\',\'get_all_user_data\');
add_action(\'profile_update\',\'get_all_user_data\');
The behavior:
- 用户已注册,我可以立即访问其用户数据(例如登录名)
- WooCommerce计费地址已更新并保存,但我仍然只能访问$login变量,“billing\\u first\\u name”meta此时显然仍然为空
- WooCommerce发货地址已更新并保存,之后我可以访问上一步中保存的计费信息,但不是当前步骤中保存的配送数据
同样适用于用户在WooCommerce结账期间注册的情况,此时还无法访问WC数据。
PS:我也试过woocommerce_after_save_address_validation
钩子,但这似乎与profile_update
就我而言。
Edit: edit_user_profile_update
效果不太好。将操作优先级设置为较高的数字(稍后执行)也没有帮助。insert_user_meta
过滤器工作,但只返回本机WP的用户元,而不返回WooCommerce客户的元。
最合适的回答,由SO网友:Kristián Filo 整理而成
我成功了。关键是woocommerce_update_customer
行动最终,我的功能仅由以下两个操作触发:
add_action(\'user_register\',\'get_all_user_data\', 99);
add_action(\'woocommerce_update_customer\',\'get_all_user_data\', 99);
我不需要
profile_update
因为我不需要跟踪默认WP用户数据中的更改。但是,它可以与woocommerce\\u update \\u customer一起使用,但请记住,您的功能将被触发两次。
SO网友:Lonk
我的解决方案是:
function get_all_user_data($user_id) {
$user_data = get_userdata($user_id);
$login = $user_data->user_login;
$customer_array = new WC_Customer( $user_id );
$customer = $customer_array->get_data();
$billing_first_name = $customer[billing][first_name];
$shipping_first_name = $customer[shipping][first_name];
}
add_action(\'user_register\',\'get_all_user_data\');
add_action(\'profile_update\',\'get_all_user_data\');
客户阵列[计费]和[发货]的阵列设置如下(如果愿意,您可以更改我的值并获取不同的数据或添加更多变量):
[billing] => Array
(
[first_name] => John
[last_name] => Doe
[company] =>
[address_1] => 1338 Easy St
[address_2] =>
[city] => Oakland
[postcode] => 48094
[country] => US
[state] => CA
[email] => [email protected]
[phone] => 6167783456
)
[shipping] => Array
(
[first_name] => John
[last_name] => Doe
[company] =>
[address_1] => 1338 Easy St
[address_2] =>
[city] => Oakland
[postcode] => 48094
[country] => US
[state] => CA
)