Soporte » Plugins y Hacks » WooCommerce » Agregar Nombre del producto comprado en el asunto del correo

  • Resuelto luishgc93

    (@luishgc93)


    Agregar Nombre del producto comprado en el asunto del correo, en referencia a este otro post:

    No encuentro como podría añadir el nombre del producto en el asunto del correo, he buscado por todos los lados pero no encuentro el hook para añadirlo.

Viendo 7 respuestas - 1 de 7 (de 7 total)
  • Moderador LGrusin

    (@lgrusin)

    Tienes unas variables (marcadores de posición) en cada correo para añadir al asunto. En el menú WooCommerce – Ajustes – Correos electrónicos, en el botón Gestionar de cada uno te dice las variables que puedes usar en el asunto para esos correos. Tienes la información en el signo de ? del campo Asunto. Son variables del tipo {variable}

    No todos los correos permiten poner cualquier variable. Para los productos no hay ninguna. Poner todos los productos en el asunto podría ser bastante largo si se compran varios productos.

    Si se me ocurre algo te lo comentaré por aquí.

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

    en este enlace : https://es.wordpress.org/support/topic/agregar-nombre-del-comprador-en-asunto-de-la-notificacion-de-nuevo-pedido/

    añaden un campo personalizado en el asunto del correo, en el ejemplo añade el id del pedido, en mi caso, solo se compraria un producto asi que no ocuparia mucho, pero no se cual es el hook para sacar el nombre del producto comprado.

    Moderador LGrusin

    (@lgrusin)

    Prueba esto a ver si te funciona

    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_name = $item['name'];
      }
    
     // Additional wanted placeholders in the array of find / relace pairs
     $additional_placeholders = array('{producto}' => $product_name, );
    
     return str_replace( array_keys( $additional_placeholders ), array_values( $additional_placeholders ), $string );
    }

    Tendrás que poner {producto} en el asunto del correo correspondiente.

    genial gracias ! funcionó

    Una pregunta, como harías con un if para comparar que si es un producto pues salga un asunto en el correo. Y si es otro producto, pues que salga otro asunto.

    Moderador LGrusin

    (@lgrusin)

    El código sería diferente del anterior, no podrías usar la variable creada {producto}. Este te podría servir:

    add_filter('woocommerce_email_subject_new_order', 'change_admin_email_subject', 1, 2);
    function change_admin_email_subject( $subject, $order ) {
     $items = $order->get_items();
     foreach ( $items as $item ) {
      $product_id = $item['product_id'];
      if ( $product_id == 87 ) {
         $subject = 'Tu asunto va aqui';
      } else { 
        $subject = 'Otro asunto'; 
      }
     return $subject;
     }
    }
    

    Igual se podría hacer una combinación de los dos.

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

    genial, hice una combinación de los dos y funcionó como yo quería:

    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 == 15733 ) {
         $subject = '¡Bienvenida al Curso Online A!';
      } elseif ( $product_id == 132 ) { 
        $subject = '¡Bienvenida al Curso Online de casas'; 
      } else {
      	 $subject = '¡Bienvenida al Curso Online de venta de coches!'; 
      }
     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 );
    }
Viendo 7 respuestas - 1 de 7 (de 7 total)
  • Debes estar registrado para responder a este debate.