Soporte » Plugins y Hacks » WooCommerce » Asunto personalizado para pedido completado

  • Resuelto luishgc93

    (@luishgc93)


    Con es este codigo que enseño abajo ¿ como haria para que solo afectase a los correos de los pedidos completados? actualmente afecta a los correos de cuando los clientes reciben la factura para pagar y cuando se ha completado el pedido. Actualmente solo quiero que este plugin afecte a los correos de los pedidos completados, he intentando meter el codigo dentro del personalizador de correos de woo , pero no hace efecto.

    alguna ayuda gracias?

    <?php
    /*
    Plugin Name: Woocommerce Cambiar 
    Plugin URI: http://midominio.com
    Description: Plugin de funciones varias
    Author: LuisHgc93
    Version: 1.0
    Author URI: .com
    */
    /*
    * Nuevas variables a las plantillas de correo
    */
    
    add_filter( 'woocommerce_email_format_string' , 'filter_email_format_string', 20, 2 );
    function filter_email_format_string( $string, $email ) {
     // Get the instance of the WC_Order object
     $order = $email->object;
     $items = $order->get_items();
      foreach ( $items as $item ) {
      $product_id = $item['product_id'];
      if ( $product_id == 173 ) {
         $subject = '¡Bienvenida al Curso Online de 4';
      } elseif ( $product_id == 192 ) { 
        $subject = '¡Bienvenida al Curso Online de 3'; 
      } else {
      	 $subject = '¡Bienvenida al Curso Online 2!'; 
      }
     return $subject;
     }
    
     // Additional wanted placeholders in the array of find / relace pairs
     $additional_placeholders = array('{producto}' => $subject, );
    
     return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string );
    }
    
    • Este debate fue modificado hace 3 semanas por luishgc93.
Viendo 12 respuestas - 1 de 12 (de 12 total)
  • Hola Luis.

    Me imagino que $order tiene alguna propiedad o método para obtener el estado del pedido, y entonces podrás hacer un condicional previo.

    Prueba y nos cuentas ok? 😉

    y cual es el metodo que te consigue el correo del pedido completado?

    Moderador LGrusin

    (@lgrusin)

    Si te fijas en la respuesta de este otro debate te puede servir
    https://es.wordpress.org/support/topic/agregar-nombre-del-producto-comprado-en-el-asunto-del-correo/#post-12170798

    Solo tienes que cambiar woocommerce_email_subject_new_order por cualquiera de estos otros filtros según sea el asunto del correo que quieras modificar.

    woocommerce_email_subject_new_order
    woocommerce_email_subject_customer_processing_order
    woocommerce_email_subject_customer_completed_order
    woocommerce_email_subject_customer_invoice
    woocommerce_email_subject_customer_note
    woocommerce_email_subject_low_stock
    woocommerce_email_subject_no_stock
    woocommerce_email_subject_backorder
    woocommerce_email_subject_customer_new_account
    woocommerce_email_subject_customer_invoice_paid

    no reconoce woocommerce_email_subject_customer_completed_order , da fallo 🙁

    <?php
    /*
    Plugin Name: Woocommerce Cambiar Asunto
    Plugin URI: http://midominio.com
    Description: Plugin de funciones varias
    Author: LuisHgc93
    Version: 1.0
    Author URI: ds.com
    */
    /*
    * Nuevas variables a las plantillas de correo
    */
    
    add_filter( 'woocommerce_email_subject_customer_completed_order' , 'filter_email_format_string', 20, 2 );
    function filter_email_format_string( $string, $email ) {
     // Get the instance of the WC_Order object
     $order = $email->object;
     $items = $order->get_items();
      foreach ( $items as $item ) {
      $product_id = $item['product_id'];
      if ( $product_id == 153 ) {
         $subject = '¡Bienvenida al Curso Online 2';
      } elseif ( $product_id == 192 ) { 
        $subject = '¡Bienvenida al Curso Online 1!'; 
      } else {
      	 $subject = '¡Bienvenida al Curso 0!'; 
      }
     return $subject;
     }
    
     // Additional wanted placeholders in the array of find / relace pairs
     $additional_placeholders = array('{producto}' => $subject, );
    
     return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string );
    }
    
    Moderador LGrusin

    (@lgrusin)

    Ya, pero es que has hecho una mezcla extraña ahí. Parte del código del enlace. Prueba asi, y después vas modificando:

    <?php
    /*
    Plugin Name: Woocommerce Cambiar Asunto
    Plugin URI: http://midominio.com
    Description: Plugin de funciones varias
    Author: LuisHgc93
    Version: 1.0
    Author URI: ds.com
    */
    /*
    * Nuevas variables a las plantillas de correo
    */
    
    add_filter( 'woocommerce_email_subject_customer_completed_order' , 'change_admin_email_subject', 1, 2 );
    function change_admin_email_subject( $subject, $order ) {
     // Get the instance of the WC_Order object
     $order = $email->object;
     $items = $order->get_items();
      foreach ( $items as $item ) {
      $product_id = $item['product_id'];
      if ( $product_id == 153 ) {
         $subject = '¡Bienvenida al Curso Online 2';
      } elseif ( $product_id == 192 ) { 
        $subject = '¡Bienvenida al Curso Online 1!'; 
      } else {
        $subject = '¡Bienvenida al Curso 0!'; 
      }
     return $subject;
     }
    }
    • Esta respuesta fue modificada hace 2 semanas, 6 días por LGrusin.

    gracias LGrusin por tu gran ayuda ! pero no me funciona 🙁 da error

    Moderador LGrusin

    (@lgrusin)

    ¿Qué error da?

    Revisa bien el código, está comprobado y funciona bien. Puedes copiar directamente desde el foro.

    Al cambiar el producto a pedido completado da el error que muestro abajo y no llega el correo ni nada. 🙁
    probe con copiar el codigo tal cual y no funciona

    Ha habido un error crítico en tu web. Por favor, revisa el buzón del correo electrónico de administración de tu sitio para instrucciones.

    Aprende más sobre la depuración en WordPress.

    • Esta respuesta fue modificada hace 2 semanas, 3 días por luishgc93.
    • Esta respuesta fue modificada hace 2 semanas, 3 días por luishgc93.
    Moderador LGrusin

    (@lgrusin)

    Comprueba que la funcion change_admin_email_subject no esté duplicada en el código. Lo digo por las pruebas que has hecho antes, igual la has dejado activa. Cambia el nombre o comenta el código que no uses y estés probando.

    con esto ya funcionó , muchas gracias por la ayuda 😀 :

    function change_admin_email_subject( $subject, $order ) {
        // Get items
        $items = $order->get_items();
    
        foreach ( $items as $item ) {
            // Get product object
            $product = wc_get_product( $item['product_id'] );
    
            // Get product id
            $product_id = $product->get_id();
    
            if ( $product_id == 153 ) {
                $subject = '¡Bienvenida al Curso Online 4';
            } elseif ( $product_id == 192 ) { 
                $subject = '¡Bienvenida al Curso Online d2'; 
            } else {
                $subject = '¡Bienvenida al Curso Online 3'; 
            }
        }
    
        return $subject;
    }
    add_filter('woocommerce_email_subject_new_order', 'change_admin_email_subject', 10, 2);

    Ahí no veo ningún punto en el que indique es con un pedido completado. ¿No sería el hook woocommerce_email_subject_customer_completed_order?

    si, disculpa no cambie el hook, pero seria:

    add_filter(‘woocommerce_email_subject_customer_completed_order’, ‘change_admin_email_subject’, 10, 2);

Viendo 12 respuestas - 1 de 12 (de 12 total)
  • Debes estar registrado para responder a este debate.