WooCommerce Send New Completed Order Email to Factory – WordPress

Advertisement

A new task for me that open WooCommerce capabilities and it’s a WOOOW, WooCommerce plugin almost has all what you need, so this time I’d like to share you guys another snippet to send New Completed Order Email to Factory (or to anyone you’d like to inform), this is useful if you want to let Factory know there was a new Completed Order rather than do a forwarding email from Admin to Factory.

So what we need here is add a new Settings under Email and in WooCommerce they have WC_Email Class ready to extend.

Let’s get started.

Copy the code below to your current theme functions.php or I strongly suggest copy and paste this into a new file and include it into a functions.php file instead, that save a lot of space in your functions.php file.


if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

if ( ! class_exists( 'WC_Factory_Completed_Order_Email' ) ) :

/**
 * Factory Completed Order Email
 *
 * An email sent to the factory when a new order is completed.
 *
 * @class 		WC_Factory_Completed_Order_Email
 * @version		2.0.0
 * @package		WooCommerce/Classes/Emails
 * @author 		WooThemes
 * @extends 		WC_Email
 */
class WC_Factory_Completed_Order_Email extends WC_Email {

	/**
	 * Constructor
	 */
	public function __construct() {

		// set ID, this simply needs to be a unique name
		$this->id = 'wc_factory_completed_order';

		// this is the title in WooCommerce Email settings
		$this->title = 'Factory Completed Order';

		// this is the description in WooCommerce email settings
		$this->description = 'Factory Completed Order Notification emails are sent to factory once the new order is completed.';

		// these are the default heading and subject lines that can be overridden using the settings
		$this->heading = 'Factory Completed Order';
		$this->subject = 'Factory Completed 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_completed', array( $this, 'trigger' ) );
		add_action( 'woocommerce_order_status_processing_to_completed',  array( $this, 'trigger' ) );				// actually I'm not sure for this but lets include this for sure.
		add_action( 'woocommerce_order_status_processing_to_completed_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' );
	}

	/**
	 * trigger function.
	 *
	 * @access public
	 * @return void
	 */
	function trigger( $order_id ) {

		if ( $order_id ) {
			$this->object 		= new WC_Order( $order_id );

			$this->find[] = '{order_date}';
			$this->replace[] = date_i18n( wc_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;

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

	/**
	 * get_content_html function.
	 *
	 * @access public
	 * @return string
	 */
	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.
	 *
	 * @access public
	 * @return string
	 */
	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();
	}

    /**
     * Initialise Settings Form Fields
     *
     * @access public
     * @return void
     */
    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

That’s it, Happy Coding ^_^

Advertisement