php - 将 WooCommerce 结帐自定义字段保存为用户元数据
问题描述
我想将我的自定义注册字段添加到我的结帐页面表单中。
我正在使用此代码将自定义字段添加到我的注册区域。
顺便说一句,我在我的注册字段中使用了我的结帐字段。
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
function custom_override_checkout_fields( $fields ) {
$fields['billing']['shipping_tc'] = array(
'label' => __('TC Kimlik No', 'woocommerce'),
'placeholder' => _x('Fatura İçin Gerekli', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
我尝试了这段代码来更新用户元
add_action( 'woocommerce_checkout_update_user_meta', 'reigel_woocommerce_checkout_update_user_meta', 10, 2 );
function reigel_woocommerce_checkout_update_user_meta( $customer_id, $posted ) {
if (isset($posted['shipping_tc'])) {
$dob = sanitize_text_field( $posted['shipping_tc'] );
update_user_meta( $user_id, $dob, $_POST[$dob]);
}
}
没有错误,但它不起作用......任何人都可以帮助我吗?
我在此代码的帮助下成功更新了其他默认结帐值;
// Custom function to save Usermeta or Billing Address of registered user
add_action('woocommerce_created_customer','zk_save_billing_address');
function zk_save_billing_address($user_id){
$address = $_POST;
foreach ($address as $key => $field){
// Only billing fields values
if( strpos( $key, 'billing_' ) !== false ){
// Condition to add firstname and last name to user meta table
if($key == 'billing_first_name' || $key == 'billing_last_name'){
$new_key = str_replace( 'billing_', '', $key );
update_user_meta( $user_id, $new_key, $_POST[$key] );
}
update_user_meta( $user_id, $key, $_POST[$key] );
}
}
}
我可以通过注册更新自定义结帐字段做什么?
这是我的注册页面。
解决方案
主要错误是在计费部分使用了以字段键开头的结帐字段shipping_
...</p>
此外,您应该更好地使用钩子复合钩子woocommerce_billing_fields
,它将为您做所有事情(因此无需像 WooCommerce 那样将字段保存为用户元数据或订单项元数据)。
所以唯一需要的代码替换将是(使用字段键billing_identifier
而不是混淆shipping_tc
):
add_filter( 'woocommerce_billing_fields' , 'add_custom_billing_field' );
function add_custom_billing_field( $fields ) {
$fields['billing_identifier'] = array(
'label' => __('TC Kimlik No', 'woocommerce'),
'placeholder' => _x('Fatura İçin Gerekli', 'placeholder', 'woocommerce'),
'required' => true,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。
该字段还将出现在我的帐户 > 地址 > 编辑帐单地址中。
推荐阅读
- performance - 使用 Kafka 和 Storm 进行负载测试
- node.js - const 未在 nodejs 中定义导致单元测试失败
- nuget-package - 如何解决:Nuget Visual Studio 2019 消息 Project 'Default' not found
- python - 尝试/除未按预期工作:“Except”错误消息附加到传递结果
- laravel - 在 Laravel 中存储 App Key 的最佳实践
- json - JSONB 数组输出 - Postgres 11.5
- ruby-on-rails - 从 Bash -> Docker 按名称 -> Ruby -> 清除缓存
- sqlite - ON CONFLICT(id) DO UPDATE SET 不适用于 DELPHI 10.3.1 中的 FireDAC
- date - 在 Google App 脚本中定义日期的问题 ~new Date()~
- html - 页脚宽度不符合预期