woocommerce_form_field manager form fields extension custom php wordpress woocommerce checkout custom-fields

php - form - woocommerce checkout manager



WooCommerce: reemplazando el estado de facturación y el código postal en los campos de pago existentes (2)

No puedo encontrar la forma de evitar el estado de facturación y el código postal.

¿Cómo puedo editar las otras partes de los campos de facturación existentes, como el estado de facturación y el código postal?

Esto es lo que tengo en el archivo functions.php en mi tema hijo (he incluido el código que afecta la parte de facturación):

<?php function my_custom_checkout_field( $checkout ) { global $wpdb; $check_zone = $wpdb->get_results("select area_name from brick_area where id=''".$_SESSION[''area'']."''",ARRAY_A); if(!empty($check_zone)){ $check_zoneid = $check_zone[''0'']; } woocommerce_form_field( ''my_field_name'', array( ''type'' => ''text'', ''class'' => array(''my-field-class form-row-wide''), ''label'' => __(''Delivery Area''), ''placeholder'' => __(''Area''), ''readonly'' =>''readonly'', ''default'' => $check_zoneid[''area_name''] ), $checkout->get_value( ''my_field_name'' )); woocommerce_form_field( ''my_expected_date'', array( ''type'' => ''text'', ''class'' => array(''my-field-class form-row-wide''), ''required'' => true, ''label'' => __(''Expected Delivery Date''), ''placeholder'' => __(''Enter expected delivery date.''), ), $checkout->get_value( ''my_expected_date'' )); /*woocommerce_form_field( ''my_expected_time'', array( ''type'' => ''text'', ''class'' => array(''my-field-class form-row-wide''), ''required'' => true, ''label'' => __(''Expected Delivery Time''), ''placeholder'' => __(''Enter expected delivery time.''), ), $checkout->get_value( ''my_expected_time'' ));*/ woocommerce_form_field( ''site_contact_name'', array( ''type'' => ''text'', ''class'' => array(''my-field-class form-row-wide''), ''required'' => true, ''label'' => __(''Site Contact Person Name''), ''placeholder'' => __(''Enter site contact person name.''), ), $checkout->get_value( ''site_contact_name'' )); woocommerce_form_field( ''site_contact_phone'', array( ''type'' => ''tel'', ''class'' => array(''my-field-class form-row-wide''), ''required'' => true, ''label'' => __(''Site Contact Phone Number''), ''placeholder'' => __(''Enter site contact phone number.''), ), $checkout->get_value( ''site_contact_phone'' )); } $fields[''billing''][''billing_city''][''default''] = $_SESSION[''cn'']; add_filter( ''woocommerce_default_address_fields'' , ''custom_override_default_address_fields'' ); function custom_override_default_address_fields( $address_fields ) { // we are changing here billing_state field to required $fields[''billing''][''billing_state''][''required''] = true; return $address_fields; } /*$fields[''billing''][''my_field_name''][''default''] = $check_zoneid[''area_name'']; $fields[''billing''][''my_field_name''][''label''] = ''Area'';*/ return $fields; } ?>

Gracias


Esta es la forma completa de anular el estado de facturación y el código postal de facturación, manteniendo el selector de facturación con opciones.

Aquí está el código, el código completamente funcional y probado:

  1. Descongelar los campos de estado de facturación y pago de código postal

add_filter( ''woocommerce_checkout_fields'' , ''partial_unsetting_checkout_fields'' ); function partial_unsetting_checkout_fields( $fields ) { unset($fields[''billing''][''billing_state'']); unset($fields[''billing''][''billing_postcode'']); return $fields; }

  1. Reinsertación de los campos del estado de facturación personalizado y del código postal

add_filter( ''woocommerce_default_address_fields'' , ''art_override_default_address_fields'' ); function art_override_default_address_fields( $address_fields ) { // @ for state $address_fields[''billing_state''][''type''] = ''select''; $address_fields[''billing_state''][''class''] = array(''form-row-wide''); $address_fields[''billing_state''][''required''] = true; $address_fields[''billing_state''][''label''] = __(''State'', ''my_theme_slug''); $address_fields[''billing_state''][''placeholder''] = __(''Enter state'', ''my_theme_slug''); $address_fields[''billing_state''][''default''] =''Choice 1''; $address_fields[''billing_state''][''options''] = array( ''option_1'' => ''Choice 1'', ''option_2'' => ''Choice 2'', ''option_3'' => ''Choice 3'' ); // @ for postcode $address_fields[''billing_postcode''][''type''] = ''text''; $address_fields[''billing_postcode''][''class''] = array(''form-row-wide''); $address_fields[''billing_postcode''][''required''] = true; $address_fields[''billing_postcode''][''label''] = __(''Postcode'', ''my_theme_slug''); $address_fields[''billing_postcode''][''placeholder''] = __(''Enter your postcode'', ''my_theme_slug''); return $address_fields; }

Naturalmente, esto va en el archivo function.php de su tema o tema infantil activo

Referencia oficial: WooThemes: Personalización de los campos de pago con acciones y filtros

Nota sobre la propiedad ''class''

Hay 2 formas de manejarlo:

  • El campo está solo en una línea (ancho 100%), usa: ''form-row-wide''
  • Hay 2 campos uno al lado del otro en la misma línea, usted usa:
    • ''form-row-first'' para el primer campo
    • ''form-row-last'' para el segundo campo

//-------------------------- OVERRIDING BILLING STATE FIELD -------------------------------// <?php //Removing previous one by using unset 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 ) { unset($fields[''billing''][''billing_state'']); return $fields; } add_filter( ''woocommerce_default_address_fields'' , ''art_override_default_address_fields'' ); function art_override_default_address_fields( $address_fields ) { // @ for state $address_fields[''Billing_State''][''type''] = ''text''; $address_fields[''Billing_State''][''class''] = array(''form-row-wide''); $address_fields[''Billing_State''][''required''] = true; $address_fields[''Billing_State''][''label''] = __(''State'', ''my_theme_slug''); $address_fields[''Billing_State''][''placeholder''] = __(''Enter state'', ''my_theme_slug''); $address_fields[''Billing_State''][''default''] =hgfdkda; return $address_fields; } ?>