Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

376
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda