• Hola

    Tengo configuradas dos zonas de envío delimitadas por Códigos Postales. Si el código postal del pedido coincide con la Zona1 tengo que enviar al correo1, y si el código postal coincide con la Zona2 tengo que enviar al correo2.

    Viendo en el foro encontré la solución de implementar en class-wc-email-new-order.php sustituyendo

    $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );

    Por

    if ($this->object->shipping_country === ‘US’) {
    $this->send( ‘correo1@gmail.com’, $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
    } else {
    $this->send( ‘correo2@email.com’, $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
    }

    El problema es que en este código el filtro lo hace con el shipping country, y no con la shipping zone como necesito. Estoy haciendo pruebas pero no consigo que funcione.

    ¿Como puedo extraer la shipping zone del pedido para hacer la comparación?

    También me valdría hacer la comparación directamente con el código postal, aunque sería preferible con la zona de envío, para luego no tener que volver a tocar el código.

    Muchas gracias

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 1 respuesta (de un total de 1)
  • Moderador Fernando Tellado

    (@fernandot)

    Prueba a ver así, a modo de ejemplo con instrucciones distintas por zona de envío:

    add_action( 'woocommerce_email_before_order_table', 'custom_text_in_email_shipping_zone_based', 10, 4 );
    function custom_text_in_email_shipping_zone_based( $order, $sent_to_admin, $plain_text, $email ) {
        if ( ! $sent_to_admin ) {
    
            // Se obtienen los datos del método de envío (hace falta el ID de la instancia)
            $shipping_item        = $order->get_items('shipping');
            $item = reset($shipping_item);
            $shipping_method_id   = $item->get_method_id();
            $method_arr           = explode( ':', $shipping_method_id );
    
            // Se obtiene el ID de la zona y sus datos
            $shipping_zone_object = WC_Shipping_Zones::get_zone_by( 'instance_id', $method_arr[1] );
            $zone_id              = $shipping_zone_object->get_id();        // Zone ID
            $zone_name            = $shipping_zone_object->get_zone_name(); // Zone name
            // Se obtienen los códigos y tipos de ubicaciones de zonas
            foreach( $shipping_zone_object->get_zone_locations() as $zone_location ){
                $zone_location_code = $zone_location->code;
                $zone_location_type = $zone_location->type;
            }
    
            if ( '0' == $zone_id ) {
                // Resto del mundo
                echo '<p><strong>Instrucciones:</strong> para otros países.</p>';
            }
            elseif ( 'Portugal' == $zone_name ) {
                // Nombre de la zona Portugal
                echo '<p><strong>Instrucciones:</strong> para Porgugal.</p>';
            }
            else {
                // El resto de zonas
                echo '<p><strong>Instrucciones:</strong> Otras zonas.</p>';
            }
        }
    }
Viendo 1 respuesta (de un total de 1)
  • El debate ‘Notificaciones a diferentes correos en función de la zona de envío’ está cerrado a nuevas respuestas.