Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

374
Views
Mostrar campo personalizado entre la dirección de facturación en las páginas de edición de pedidos de administración de WooCommerce

Actualmente estoy tratando de agregar un campo personalizado a los campos de dirección predeterminados (nombre, apellido, etc.)

El campo debe usarse para establecer un saludo para el cliente.

Para ello utilicé el siguiente filtro:

 add_filter( 'woocommerce_default_address_fields', 'custom_woocommerce_address_fields' ); function custom_woocommerce_address_fields($fields) { $fields['salutation'] = array( 'label' => __('Anrede', 'woocommerce'), // Add custom field label 'placeholder' => 'CA12345678', // Add custom field placeholder 'required' => true, // if field is required or not 'clear' => false, // add clear or not 'type' => 'select', // add field type 'options' => array( 'Herr' => 'Herr', 'Frau' => 'Frau', 'Firma' => 'Firma' ), 'priority' => 1, // add priority 'class' => array('billing-salutation-input')// add class name ); return $fields; }

Guardando el campo personalizado:

 add_action( 'woocommerce_checkout_update_order_meta', 'save_new_checkout_field' ); function save_new_checkout_field( $order_id ) { if ( $_POST['billing_salutation'] ) update_post_meta( $order_id, '_salutation', esc_attr( $_POST['billing_salutation'] ) ); }

Problema:

Cuando miro los detalles del pedido, el nuevo campo no aparece debajo de los campos de dirección predeterminados.

Entonces usé el siguiente código para mostrar los nuevos datos.

 add_action( 'woocommerce_admin_order_data_after_billing_address', 'show_new_checkout_field_order', 10, 1 ); function show_new_checkout_field_order( $order ) { $order_id = $order->get_id(); if ( get_post_meta( $order_id, '_salutation', true ) ) echo '<p><strong>Anrede:</strong> ' . get_post_meta( $order_id, '_salutation', true ) . '</p>'; }

Sin embargo, el campo siempre se muestra en la parte inferior y no puedo encontrar la manera de llevar el campo a la posición deseada (imagen)

ingrese la descripción de la imagen aquí

¿Tengo que usar un enlace diferente para mostrar los datos en la ubicación deseada (detalles de facturación)?

¿O tengo que editar una plantilla específica de woocommerce?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

El resultado es una cadena, que usa <br/> para separar los detalles de la dirección de facturación del pedido.

Así que hay 2 vistas posibles:

  • company_name<br/>Firstname Lastname<br/>street<br/>1<br/>1000 Location
  • Firstname Lastname<br/>street<br/>1<br/>1000 Location

Hay varias posibilidades que puede aplicar para responder a su pregunta, pero la más fácil es editar la cadena a través del gancho de filtro woocommerce_order_get_formatted_billing_address .

Nota: vamos a verificar si realmente hay una empresa de facturación y ajustaremos nuestro resultado en función de eso.

Nota: ajuste $order->get_meta( '_your_meta_key' ); a tus necesidades

Entonces obtienes:

 function str_replace_first( $search, $replace, $subject ) { $pos = strpos( $subject, $search ); if ( $pos !== false ) { return substr_replace( $subject, $replace, $pos, strlen( $search ) ); } return $subject; } /** * Filter orders formatterd billing address. * * @since 3.8.0 * @param string $address Formatted billing address string. * @param array $raw_address Raw billing address. * @param WC_Order $order Order data. @since 3.9.0 */ function filter_woocommerce_order_get_formatted_billing_address( $address, $raw_address, $order ) { // Get meta $value = $order->get_meta( '_your_meta_key' ); // When empty, return if ( empty ( $value ) ) return $address; // Get billing company $billing_company = $order->get_billing_company(); // Not empty if ( ! empty ( $billing_company ) ) { $address = str_replace_first( '<br/>', '<br/>' . $value . '<br/>', $address ); } else { $address = $value . '<br/>' . $address; } return $address; } add_filter( 'woocommerce_order_get_formatted_billing_address', 'filter_woocommerce_order_get_formatted_billing_address', 10, 3 );

Resultado:

  • company_name<br/>meta_value<br/>Firstname Lastname<br/>street<br/>1<br/>1000 Location
  • meta_value<br/>Firstname Lastname<br/>street<br/>1<br/>1000 Location

Usado en esta respuesta: https://stackoverflow.com/a/2606638/11987538

over 4 years ago · Santiago Trujillo Report

0

¡Es absolutamente factible! Puede billing_address_fields append ¡Solo necesita personalizar sus datos usando los ganchos correctos!

Así que usó el gancho de filtro woocommerce_default_address_fields para append $fields['salutation'] a los datos predeterminados. En la pantalla de administración, debe hacer lo mismo pero usando diferentes ganchos.

Esto es lo que vamos a hacer:

  1. Vamos a utilizar el gancho de filtro woocommerce_localisation_address_formats para definir un marcador de posición para nuestros datos personalizados.
  2. Luego, intentaremos agregar un reemplazo para el marcador de posición usando el gancho de filtro woocommerce_formatted_address_replacements .
  3. Y, por último, obtendremos nuestros datos personalizados y completaremos el marcador de posición que definimos con el gancho de filtro woocommerce_order_formatted_billing_address .

1- woocommerce_localisation_address_formats

 add_filter('woocommerce_localisation_address_formats', 'admin_customized_localisation_address_formats', 99); function admin_customized_localisation_address_formats($billing_address_formats) { if (is_admin()) { foreach($billing_address_formats as $key => $value) { $billing_address_formats[$key] .= "\n{salutation}"; } } return $billing_address_formats; }

2- woocommerce_formatted_address_replacements

 add_filter('woocommerce_formatted_address_replacements', 'adding_customized_replacements', 10, 2); function adding_customized_replacements($replacements, $args) { $replacements["{salutation}"] = !empty($args["salutation"]) ? $args["salutation"] : ""; return $replacements; }

3- woocommerce_order_formatted_billing_address

 add_filter('woocommerce_order_formatted_billing_address', 'display_customized_order_address_fields_on_admin', 10, 2); function display_customized_order_address_fields_on_admin($address, $order) { $order_id = $order->get_id(); $address["salutation"] = get_post_meta($order_id, '_salutation', true) ? 'Anrede: ' . get_post_meta($order_id, '_salutation', true) : "No salutation data"; return $address; }

Esto generará esto:

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!