如何仅向某些用户角色显示和订购 WooCommerce 结帐中的某些字段?

问题描述 投票:0回答:0

我编辑问题

我应该怎么做才能重新排序根据我的需要创建的新结帐字段?

我应该怎么做才能让这些字段根据他们的角色只显示给某些用户?

仅向某些用户角色显示此新字段很重要

感谢本网站的另一位用户@MartinMirchev 的合作,他为我提供了文档供我审查,我已经设法将问题隔离开来。

新字段不是重新排序,而是重复的,显示在底部,电子邮件地址字段之后,以及“运送到不同的地址?”复选框。

我创建的新字段显示在我用代码优先级指示的位置,但它只显示条目,占位符或我分配给它的标签未显示(NIF/CIF:) 要重新排序,我使用下面的第二个代码片段。

我在这些功能中做错了什么?

我在公司 NIF 的 woocommerce 结帐中有一个新字段。以下函数创建字段并将其显示在表单上。

/* show the new field on the checkout page */

add_action( 'woocommerce_before_order_notes', 'bbloomer_add_custom_checkout_field' );
  
function bbloomer_add_custom_checkout_field( $checkout ) { 
   $current_user = wp_get_current_user();
   $saved_license_no = $current_user->license_no;
   woocommerce_form_field( 'license_no', array(        
      'type' => 'text',        
      'class' => array( 'form-row-wide' ),        
      'label' => 'NIF/CIF',        
      'placeholder' => 'B12345678',        
      'required' => true,        
      'default' => $saved_license_no,        
   ), $checkout->get_value( 'license_no' ) ); 
}


/* make sure the new field is not empty */

add_action( 'woocommerce_checkout_process', 'bbloomer_validate_new_checkout_field' );
  
function bbloomer_validate_new_checkout_field() {    
   if ( ! $_POST['license_no'] ) {
      wc_add_notice( 'Por favor ingrese su número de NIF', 'error' );
   }
}



/* save the new field and show it in email, checkout, etc ...*/

add_action( 'woocommerce_checkout_update_order_meta', 'bbloomer_save_new_checkout_field' );
  
function bbloomer_save_new_checkout_field( $order_id ) { 
    if ( $_POST['license_no'] ) update_post_meta( $order_id, '_license_no', esc_attr( $_POST['license_no'] ) );
}
 
add_action( 'woocommerce_thankyou', 'bbloomer_show_new_checkout_field_thankyou' );
   
function bbloomer_show_new_checkout_field_thankyou( $order_id ) {    
   if ( get_post_meta( $order_id, '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order_id, '_license_no', true ) . '</p>';
}
  
add_action( 'woocommerce_admin_order_data_after_billing_address', 'bbloomer_show_new_checkout_field_order' );
   
function bbloomer_show_new_checkout_field_order( $order ) {    
   $order_id = $order->get_id();
   if ( get_post_meta( $order_id, '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order_id, '_license_no', true ) . '</p>';
}
 
add_action( 'woocommerce_email_after_order_table', 'bbloomer_show_new_checkout_field_emails', 20, 4 );
  
function bbloomer_show_new_checkout_field_emails( $order, $sent_to_admin, $plain_text, $email ) {
    if ( get_post_meta( $order->get_id(), '_license_no', true ) ) echo '<p><strong>NIF/CIF:</strong> ' . get_post_meta( $order->get_id(), '_license_no', true ) . '</p>';
}

下面我展示了重新排序表单字段的功能。默认情况下,新字段显示在表单底部。 当然,这些功能适用于其他用户,并且任何人都可以使用,如“Business Bloomer”教程和文章中所示

在这里您会找到更多功能,我从中找到灵感重新排序付款表单字段 使用此功能,我正在更改优先级,它应该将新字段 (NIF/CIF) 放在“公司名称(可选)”字段下方。

add_filter( 'woocommerce_default_address_fields', 'bbloomer_reorder_checkout_fields' );
 
function bbloomer_reorder_checkout_fields( $fields ) {
 
   // default priorities:
   // 'first_name' - 10
   // 'last_name' - 20
   // 'company' - 30
   // 'country' - 40
   // 'address_1' - 50
   // 'address_2' - 60
   // 'city' - 70
   // 'state' - 80
   // 'postcode' - 90
 
  // e.g. move 'company' above 'first_name':
  // just assign priority less than 10
  $fields['license_no']['priority'] = 35;
 
  return $fields;
}

位置没有变化,是重复的,但是在我需要新字段的顶部,只显示了输入抽屉,没有显示NIF/CIF标签,也没有显示占位符。

我需要在功能中更正什么才能完美显示所有内容?

我应该怎么做才能让我创建的这个字段只显示给某些用户?

我应该在功能中更正什么才能完美显示所有内容?

php wordpress woocommerce checkout user-roles
© www.soinside.com 2019 - 2024. All rights reserved.