为WooCommerce使用Poor Guys Swiss Knife插件,我创建了3个新的结算字段:生日(日期),简报(选择:是/否)和条款&条件(选择:是/否)。我在网站上成功注册成为新客户并填写了这些新领域。
但是,当检查在仪表板中创建的帐户时,我会看到除了我使用Poor Guys Swiss Knife插件创建的3个常规字段之外的所有常规字段。那是为什么?
答案 0 :(得分:3)
显然,插件不会将字段数据发送到用户帐户。
您可以使用functions.php文件中的woocommerce自定义字段获得相同的结果。
// Hook in
add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
$fields['shipping']['shipping_phone'] = array(
'label' => __('Phone', 'woocommerce'),
'placeholder' => _x('Phone', 'placeholder', 'woocommerce'),
'required' => false,
'class' => array('form-row-wide'),
'clear' => true
);
return $fields;
}
要使其成为必需,请使用以下代码:
/**
* Process the checkout
*/
add_action('woocommerce_checkout_process', 'my_custom_checkout_field_process');
function my_custom_checkout_field_process() {
// Check if set, if its not set add an error.
if ( ! $_POST['my_field_name'] )
wc_add_notice( __( 'Please enter something into this new shiny field.' ), 'error' );
}
您可以在此网站上找到更多信息:
http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/
答案 1 :(得分:1)
这是我提出的解决方案,它对我来说一直很好,希望它对你也有帮助。
我使用该插件为结算表单创建了一些新字段,但我们只使用一个作为示例:
-Resale License#(billing_resale_license_)
现在,插件(或第一个答案中的代码)会将字段添加到表单中,在我的情况下,我最终得到:
<input type="text" class="input-text " name="billing_resale_license_" id="billing_resale_license_" placeholder="" value="" display="text">
现在,我们需要将该字段的值保存到user_meta表中,如下所示:
add_action( 'woocommerce_checkout_process', 'ws_billing_fields_save', 10, 1 );
function ws_billing_fields_save( $user_id ){
if ( isset( $_POST['billing_resale_license_'] ) ) {
update_user_meta($user_id, 'billing_resale_license_', $_POST['billing_resale_license_']);
}
}
现在数据存储在user_meta中,我们需要挂钩到配置文件区域以显示它并允许用户或管理员编辑它。
add_action( 'show_user_profile', 'ws_update_user_profile' );
add_action( 'edit_user_profile', 'ws_update_user_profile' );
function ws_update_user_profile( $user ){ ?>
<h3>Additional Fields</h3>
<table class="form-table">
<tr>
<th><label for="billing_resale_license_">Resale #</label></th>
<td><input type="text" name="billing_resale_license_" value="<?php echo esc_attr(get_the_author_meta( 'billing_resale_license_', $user->ID )); ?>" class="regular-text" /></td>
</tr>
</table>
add_action( 'personal_options_update', 'save_extra_fields' );
add_action( 'edit_user_profile_update', 'save_extra_fields' );
function save_extra_fields( $user_id ){
update_user_meta( $user_id,'billing_resale_license_', sanitize_text_field( $_POST['billing_resale_license_'] ) );
}
我选择将我的附加字段分解到默认Woocommerce字段上方的自己的表中,因为我有很多这些字段并且它们更具体针对用户而不是订单处理本身,因此我将它们组织在自己的表中标题为“附加字段”。
答案 2 :(得分:0)
我认为结算字段仅在订单上可见,而不是用户。用户字段可通过register_form
和user_register
挂钩获得。