Woocommerce:暂停所有新完成的订单(特别是 COD)并且只发送一封暂停电子邮件作为标准确认

Woocommerce: All new completed orders to on-hold (COD in particular) and send only one on-hold email as a standard confirmation

我在日本生活和工作。我们有一家资源有限的小型牡蛎公司,我自己进行所有编程,但我的知识和技能有限。第一次发帖,如果这不是一个好问题或者我犯了一个错误,抱歉...在此先感谢。

我正在使用最新的 Woocommerce 3.2.3。我还使用了一些插件,包括电子邮件控制插件、用于感谢和确认银行 (furikomi) 付款的自定义电子邮件,以及 WooCommerce for Japan 插件。

我想创建一个类似于其他流行的日本 EC 网站(rakuten karamishop、yahoo!auctions 等)的工作流程。日本没有自动完成,太注重服务了,一切都必须仔细检查和确认。如果你好奇的话,日本的标准流程是: 客户下订单 -> 客户收到一揽子确认电子邮件 -> 我们检查以确保费用正确并且订单是我们可以填写和处理的 -> 我们发送带有特定交货日期和时间等的处理订单 -> 我们打包并填写订单,然后发送带有跟踪代码的 "shipped" 消息。

无论如何 我发现了这个:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) {
    global $woocommerce;
     if ( !$order_id )
        return;
    $order = new WC_Order( $order_id );
    $order->update_status( 'on-hold' );
}

来自 here. And many variations this 。这让我成功了一半。但是电子邮件仍在触发处理(无论如何,对于 PayPal 和 COD)。

我也知道 COD 订单的电子邮件似乎挂在这里:

add_filter( 'woocommerce_payment_complete_order_status', array( $this, 'change_payment_complete_order_status' ), 10, 3 );

在 "class-wc-gateway-cod.php" 文件中。这些触发器将导致我不想要的电子邮件,"processing" 电子邮件。

// Triggers for this email
add_action( 'woocommerce_order_status_failed_to_processing_notification', array( $this, 'trigger' ), 10, 2 );
add_action( 'woocommerce_order_status_on-hold_to_processing_notification', array( $this, 'trigger' ), 10, 2 );
add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $this, 'trigger' ), 10, 2 );

目前我们提供三种付款方式:Paypal、Furikomi(日本银行转账)和 COD。我希望所有这些付款方式都 return 带有暂停消息,我们将把它用作 "auto-confirm" 消息。他们在系统中的状态也应该是"on-hold"。然后我们可以把它们移到处理中,然后我们就可以顺利处理了。

所以,总而言之,我想需要: 1. 从所有网关上解开所有 order statuses。 2.所有已完成的新订单默认为"on-hold" 3. 这应该使 "on-hold" 电子邮件触发,一箭双雕。

我似乎只设法将状态从订单处理和触发器完成后的状态更改为 "on-hold" (same as the official plugin it seems),这只会在后端帮助我们。

旁注:如果他们真的希望 Woocommerce 在这里竞争,他们真的应该将其包含在免费的 Woocommerce for Japan 插件中,但是那个社区很慢,当我问一个问题时,他们只是让我支付自定义插件。

谢谢!

编辑我明白了!我刚刚找到此页面,其中包含电子邮件的取消挂钩代码。使用这个新的电子邮件触发器取消挂钩和重新挂钩。这是代码以备不时之需:

/**
 * All orders that would normally go from pending to processing go from pending to on-hold
 */ 

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_onhold_order' );

function custom_woocommerce_auto_onhold_order( $order_id ) {
    global $woocommerce;
     if ( !$order_id )
        return;
    $order = new WC_Order( $order_id );
    $order->update_status( 'on-hold' ); //All new orders go to "on-hold"
}

add_action( 'woocommerce_email', 'unhook_new_order_processing_emails' );

function unhook_new_order_processing_emails( $email_class ) {
        // Turn off pending to processing for now
        remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
        // Turn it back on but send the on-hold email
        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
}