gpt4 book ai didi

wordpress - 在 woocommerce 结帐表单处理后更新用户元数据

转载 作者:行者123 更新时间:2023-12-04 02:50:40 28 4
gpt4 key购买 nike

我将 woocommerce 与 Wordpress 结合使用,并在结帐时添加了一些自定义字段:

add_action('woocommerce_after_order_notes', 'my_custom_checkout_field');

function my_custom_checkout_field( $checkout ) {

$extra_fields = array('job_title', 'company', 'telephone', 'occupation');

foreach($extra_fields as $key => $value) {

woocommerce_form_field($value, array(
'type' => 'text',
'class' => array('my-field-class form-row-wide'),
'label' => __($label),
'value' => '',
), $checkout->get_value( $value ));

}
}

目前,这些在结帐时显示正常,不确定在这种情况下使用 woocommerce_after_order_notes 是否正确。我还在用户元数据中添加了一些自定义字段,这些字段对应于添加到结帐的字段 - 所有这些都显示在用户个人资料页面中:

function add_contact_methods( $contactmethods ) {
$contactmethods['job_title'] = 'Job Title';
$contactmethods['company'] = 'Company Name';
$contactmethods['telephone'] = 'Telephone';
$contactmethods['occupation'] = 'Occupation';
$contactmethods['refer'] = 'How you heard about us?';
return $contactmethods;
}
add_filter('user_contactmethods','add_contact_methods',10,1);

正如您所想象的,如果我在任何个人资料页面中更新这些字段中的任何一个,它都可以正常工作,但我似乎无法做的是在新用户进行购买时更新用户元数据,它不会更新用户元数据对于数据库中的这些字段。

我非常了解这是如何工作的,并且明白我必须连接到 Woocommerce 流程以将字段添加到流程中。所以我也将这段代码添加到我的函数中:

add_action('woocommerce_checkout_update_user_meta', 'my_custom_checkout_field_update_user_meta');

function my_custom_checkout_field_update_user_meta( $user_id ) {
global $extra_fields;
foreach($extra_fields as $key => $value) {
if ($_POST[$value]) update_user_meta( $user_id, $value, esc_attr($_POST[$value]));
}
}

现在的转折点是,如果已经作为成员(member)登录的用户重新购买并通过结帐,则此方法有效 - 此方法有效的原因是因为 $user_id 已经存在,但是当新用户结帐时,他们还不作为用户存在,因此该函数无法更新 NIL 的用户元数据,其中 $user_id 不存在。

我的问题是,我应该如何 Hook 到结账过程中,大概是在创建用户之后,这样我才能得到返回的 $user_id,并执行此函数来更新用户元。

最佳答案

class-wc-checkout.php 第 639 行创建新用户 $this->customer_id = wp_insert_user( apply_filters( 'woocommerce_new_customer_data', $new_customer_data ) ); 新客户数据是一个数组列在该行的正上方。

之后,您可以使用第 649 行的操作访问用户 ID do_action( 'woocommerce_created_customer', $this->customer_id );

这不太可能,在您的情况下,您需要使用过滤器,但只需添加操作“woocommerce_created_customer”,拉入 ID,然后添加元数据。

关于wordpress - 在 woocommerce 结帐表单处理后更新用户元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17813195/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com