Creé mi propia clase de correo electrónico en WooCommerce. Debido a que necesito un parámetro personalizado en el contenido de mi correo electrónico, agregué un marcador de posición con este parámetro personalizado a la función de activación de correo electrónico de wc:
public function trigger( $order_id, $firstname, $lastname, $order = false ) {
$this->setup_locale();
if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
$order = wc_get_order( $order_id );
}
if ( is_a( $order, 'WC_Order' ) ) {
$this->object = $order;
$this->recipient = $this->object->get_billing_email();
$this->placeholders['{order_date}'] = wc_format_datetime( $this->object->get_date_created() );
$this->placeholders['{order_number}'] = $this->object->get_order_number();
$this->placeholders['{full_name}'] = $firstname . ' ' . $lastname;
}
if ( $this->is_enabled() && $this->get_recipient() ) {
$this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
}
$this->restore_locale();
}
Después de esto, hice esto en el archivo PHP de contenido:
<?php printf( __( get_option( 'wc_custom_email_info' ) ), '{full_name}' ); ?>
En la opción que he escrito %s
para que pueda agregar el nombre completo al contenido. Pero lamentablemente obtengo el nombre del marcador de posición y no el contenido:
Blaaaaaaa {nombre_completo} blaaaa
Pero necesito esto aquí:
Blaaaaaaa Joe Martin blaaaa
Actualizar
El nombre aquí no es el nombre del cliente del pedido. Este es un nombre que paso a través de un do_action
que acciono desde un botón. Entonces, cuando alguien en mi página hace clic en este botón, busco su ID de usuario y obtengo el nombre del usuario que hizo clic en el botón. Este es el activador de correo electrónico personalizado que uso:
$user = get_userdata( get_current_user_id() );
$firstname = $user->user_firstname;
$lastname = $user->last_name;
//Trigger email sending
do_action( 'trigger_email', $order_id, $firstname, $lastname );
Luego hago esto en la clase de correo electrónico:
//Trigger for this email.
add_action( 'trigger_email', array( $this, 'trigger' ), 10, 10 );
Después de esto, puede volver a la función de activación superior.
Porque he agregado allí mi texto personalizado que define el contenido. Para obtener el nombre en el contenido, lo paso como parámetro.
– Sr. Jo
22 de noviembre de 2018 a las 23:47
@LoicTheAztec Error fatal de PHP: error no detectado: usar $ esto cuando no está en el contexto del objeto
– Sr. Jo
22 de noviembre de 2018 a las 23:49
marcadores de posición[‘{full_name}’]; ?>
– Sr. Jo
22 de noviembre de 2018 a las 23:49
Continuemos esta discusión en el chat.
– Sr. Jo
22/11/2018 a las 23:50