Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

375
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda