woo what tema premium front php wordpress woocommerce

php - what - woocommerce premium



Correo electrónico de reembolso de WooCommerce (2)

He realizado una gran cantidad de búsquedas y, aunque he encontrado usuarios que me han preguntado cómo lograr lo siguiente, no hay ejemplos de soluciones de trabajo a mi leal saber y entender.

La pregunta es sobre el popular plugin de Wordpress "Woocommerce". El complemento viene con un sistema de correo electrónico para facilitar la vida del propietario del sitio de comercio electrónico y del cliente. Un problema es que no hay un correo electrónico que se envía cuando un gerente de tienda cambia el estado del pedido a "Reembolsado". Alguien dijo que esto es porque es un proceso manual. Esto es cierto, es un proceso que el dueño de la tienda haría a través de su cuenta mercantil o cuenta de paypal. Pero una vez hecho esto y el propietario de la tienda inicia sesión en su panel de administración de WordPress y cambia el estado de una orden a Reembolsado, sería beneficioso que se genere un correo electrónico y se envíe al cliente.

Esto es algo que he visto solicitado.

Así que decidí modificar un tutorial en http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/#comment-553147

Estoy tratando de enviar un correo electrónico cuando el estado de un pedido se actualiza a "Reembolsado".

Aquí está el código para el archivo de complemento inicial

<?php /** * Plugin Name: WooCommerce Custom Expedited Order Email * Plugin URI: http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/ * Description: Demo plugin for adding a custom WooCommerce email that sends admins an email when an order is received with expedited shipping * Author: SkyVerge * Author URI: http://www.skyverge.com * Version: 0.1 * * License: GNU General Public License v3.0 * License URI: http://www.gnu.org/licenses/gpl-3.0.html * */ if ( ! defined( ''ABSPATH'' ) ) exit; // Exit if accessed directly /** * Add a custom email to the list of emails WooCommerce should load * * @since 0.1 * @param array $email_classes available email classes * @return array filtered available email classes */ function add_expedited_order_woocommerce_email( $email_classes ) { // include our custom email class require( ''includes/class-wc-expedited-order-email.php'' ); // add the email class to the list of email classes that WooCommerce loads $email_classes[''WC_Expedited_Order_Email''] = new WC_Expedited_Order_Email(); return $email_classes; } add_filter( ''woocommerce_email_classes'', ''add_expedited_order_woocommerce_email'' );

Y aquí hay un enlace al código de mi clase

<?php if ( ! defined( ''ABSPATH'' ) ) exit; // Exit if accessed directly /** * A custom Expedited Order WooCommerce Email class * * @since 0.1 * @extends /WC_Email */ class WC_Expedited_Order_Email extends WC_Email { /** * Set email defaults * * @since 0.1 */ public function __construct() { // set ID, this simply needs to be a unique name $this->id = ''wc_expedited_order''; // this is the title in WooCommerce Email settings $this->title = ''Refunded Order Email''; // this is the description in WooCommerce email settings $this->description = ''Refunded Emails are sent when an order status has been changed to Refunded''; // these are the default heading and subject lines that can be overridden using the settings $this->heading = ''Refunded Order''; $this->subject = ''Refunded Order''; // these define the locations of the templates that this email should use, we''ll just use the new order template since this email is similar $this->template_html = ''emails/admin-new-order.php''; $this->template_plain = ''emails/plain/admin-new-order.php''; // Trigger on new paid orders add_action( ''woocommerce_order_status_pending_to_processing_notification'', array( $this, ''trigger'' ) ); add_action( ''woocommerce_order_status_failed_to_processing_notification'', array( $this, ''trigger'' ) ); // Call parent constructor to load any other defaults not explicity defined here parent::__construct(); // this sets the recipient to the settings defined below in init_form_fields() $this->recipient = $this->get_option( ''recipient'' ); // if none was entered, just use the WP admin email as a fallback if ( ! $this->recipient ) $this->recipient = get_option( ''admin_email'' ); } /** * Determine if the email should actually be sent and setup email merge variables * * @since 0.1 * @param int $order_id */ public function trigger( $order_id ) { // bail if no order ID is present if ( ! $order_id ) return; $order = new WC_Order( $order_id ); //bail if not a refunded order if ( ''refunded'' !== $order->status ) { return; } // setup order object $this->object = new WC_Order( $order_id ); // bail if shipping method is not expedited //if ( ! in_array( $this->object->get_shipping_method(), array( ''Three Day Shipping'', ''Next Day Shipping'' ) ) ) //return; // replace variables in the subject/headings $this->find[] = ''{order_date}''; $this->replace[] = date_i18n( woocommerce_date_format(), strtotime( $this->object->order_date ) ); $this->find[] = ''{order_number}''; $this->replace[] = $this->object->get_order_number(); if ( ! $this->is_enabled() || ! $this->get_recipient() ) return; // woohoo, send the email! $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() ); } /** * get_content_html function. * * @since 0.1 * @return string */ public function get_content_html() { ob_start(); woocommerce_get_template( $this->template_html, array( ''order'' => $this->object, ''email_heading'' => $this->get_heading() ) ); return ob_get_clean(); } /** * get_content_plain function. * * @since 0.1 * @return string */ public function get_content_plain() { ob_start(); woocommerce_get_template( $this->template_plain, array( ''order'' => $this->object, ''email_heading'' => $this->get_heading() ) ); return ob_get_clean(); } /** * Initialize Settings Form Fields * * @since 0.1 */ public function init_form_fields() { $this->form_fields = array( ''enabled'' => array( ''title'' => ''Enable/Disable'', ''type'' => ''checkbox'', ''label'' => ''Enable this email notification'', ''default'' => ''yes'' ), ''recipient'' => array( ''title'' => ''Recipient(s)'', ''type'' => ''text'', ''description'' => sprintf( ''Enter recipients (comma separated) for this email. Defaults to <code>%s</code>.'', esc_attr( get_option( ''admin_email'' ) ) ), ''placeholder'' => '''', ''default'' => '''' ), ''subject'' => array( ''title'' => ''Subject'', ''type'' => ''text'', ''description'' => sprintf( ''This controls the email subject line. Leave blank to use the default subject: <code>%s</code>.'', $this->subject ), ''placeholder'' => '''', ''default'' => '''' ), ''heading'' => array( ''title'' => ''Email Heading'', ''type'' => ''text'', ''description'' => sprintf( __( ''This controls the main heading contained within the email notification. Leave blank to use the default heading: <code>%s</code>.'' ), $this->heading ), ''placeholder'' => '''', ''default'' => '''' ), ''email_type'' => array( ''title'' => ''Email type'', ''type'' => ''select'', ''description'' => ''Choose which format of email to send.'', ''default'' => ''html'', ''class'' => ''email_type'', ''options'' => array( ''plain'' => ''Plain text'', ''html'' => ''HTML'', ''woocommerce'', ''multipart'' => ''Multipart'', ''woocommerce'', ) ) ); } } // end /WC_Expedited_Order_Email class

Estos son los únicos 2 archivos en mi complemento. Lo he activado y aparece como un correo electrónico en la lista de correos electrónicos en la pestaña de correo electrónico de woo commerce. Lamentablemente, no se envía ningún correo electrónico cuando se actualiza el estado del pedido.

¿Alguien puede aconsejar por qué esto no funciona?

He recibido algunos comentarios de una persona que dijo lo siguiente

"las acciones para las que está agregando el desencadenador son para cambios de estado de orden de procesamiento pendiente / fallido - http://cld.wthms.co/cZzw . Desea que estas sean acciones relacionadas con los pedidos reembolsados, como : add_action (''woocommerce_order_status_refunded'', array ($ this, ''trigger'')); (para ver exactamente las clases de correo electrónico de woocommerce) "

Estoy usando Woocommerce 2.1.12


Creo que el problema es que estás llamando

add_action( ''woocommerce_order_status_pending_to_processing_notification'', array( $this, ''trigger'' ) );

Intenta llamar:

add_action( ''woocommerce_order_status_refunded'', array( $this, ''trigger'' ) );


El principal problema es que el woocommerce_order_status_refunded no está registrado de forma predeterminada con la send_transactional_email llamada send_transactional_email , por lo que no puede usar el método anterior para enviar correos electrónicos automáticamente cuando el estado del pedido cambia a Reembolsado .

Puedes cambiar eso con lo siguiente:

/** * Register the "woocommerce_order_status_refunded" hook which is necessary to * allow automatic email notifications when the order is changed to refunded. * * @see http://.com/a/26413223/2078474 */ add_action( ''woocommerce_init'', function() { add_action( ''woocommerce_order_status_refunded'', array( WC(), ''send_transactional_email'' ), 10, 10 ); });

También asegúrese de tener habilitado en la sección correspondiente en la configuración de Woo -> pestaña de correos electrónicos :

Por defecto, las siguientes acciones están registradas para las notificaciones automáticas por correo electrónico:

woocommerce_low_stock woocommerce_no_stock woocommerce_product_on_backorder woocommerce_order_status_pending_to_processing woocommerce_order_status_pending_to_completed woocommerce_order_status_pending_to_on-hold woocommerce_order_status_failed_to_processing woocommerce_order_status_failed_to_completed woocommerce_order_status_completed woocommerce_new_customer_note woocommerce_created_customer

Actualizar:

Buenas noticias, @helgatheviking acaba de fusionar su solicitud de extracción de WooCommerce (ver los comentarios a continuación).

Esto significa que deberíamos poder usar el nuevo filtro woocommerce_email_actions :

add_filter( ''woocommerce_email_actions'', function( $email_actions ) { $email_actions[] = ''woocommerce_order_status_refunded''; return $email_actions; });

en WooCommerce 2.3+.

Similar debería funcionar para otras acciones de correo electrónico no predeterminadas, como woocommerce_order_status_cancelled .