使用 WooCommerce 中的电子邮件 ID 定位特定电子邮件通知

问题描述 投票:0回答:1

我在 WooCommerce 中设置了自定义状态和自定义电子邮件。我想使用当前电子邮件,

WC_Email
,而不是当前状态作为电子邮件模板内的变量。

我需要在电子邮件模板中添加一些 if 语句。我没有使用订单状态来确保如果手动重新发送订单电子邮件,它不会使用单独的电子邮件发送当前订单状态的数据。

如何将

WC_Email
电子邮件 ID 作为 WooCommerce 中的变量进行回显?

php wordpress woocommerce orders email-notifications
1个回答
19
投票

WooCommerce 中不存在

wc_order_email
类或函数,因此我更新了您的问题。

您看到的是

$email
变量参数
WC_Email
当前类型对象)
。它主要在模板和钩子中的任何地方定义。

要获取可用的当前电子邮件 ID 作为变量,您只需使用

$email_id = $email->id
...

要获取自定义电子邮件的当前电子邮件 ID,您应该使用此代码(仅用于测试

add_action( 'woocommerce_email_order_details', 'get_the_wc_email_id', 9, 4 );
function get_the_wc_email_id( $order, $sent_to_admin, $plain_text, $email ) {
    // Will output the email id for the current notification
    echo '<pre>'; print_r($email->id); echo '</pre>'; 
}

代码位于活动子主题(或主题)的 function.php 文件中,或者也位于任何插件文件中。

您将获得以下其中一项:

  1. 对于 WooCommerce 默认通知:

    • new_order
    • customer_on_hold_order
    • customer_processing_order
    • customer_completed_order
    • customer_refunded_order
    • customer_partially_refunded_order
    • cancelled_order
    • failed_order
    • customer_reset_password
    • customer_invoice
    • customer_new_account
    • customer_note
    • low_stock
    • no_stock
  2. 对于 WooCommerce 订阅:

    • new_renewal_order
    • new_switch_order
    • customer_processing_renewal_order
    • customer_completed_renewal_order
    • customer_on_hold_renewal_order
    • customer_completed_switch_order
    • customer_renewal_invoice
    • cancelled_subscription
    • expired_subscription
    • suspended_subscription
  3. 对于 WooCommerce 预订:

    • new_booking
    • booking_reminder
    • booking_confirmed
    • booking_pending_confirmation
    • booking_notification
    • booking_cancelled
    • admin_booking_cancelled
  4. 对于 WooCommerce 会员:

    • WC_Memberships_User_Membership_Note_Email
    • WC_Memberships_User_Membership_Ending_Soon_Email
    • WC_Memberships_User_Membership_Ended_Email
    • WC_Memberships_User_Membership_Renewal_Reminder_Email
    • WC_Memberships_User_Membership_Activated_Email

一旦您获得自定义电子邮件通知的正确的电子邮件 ID slug,您就可以在以下任何挂钩上使用它(而不是覆盖电子邮件模板)

  • woocommerce_email_header
    (2 个参数:
    $email_heading
    $email
  • woocommerce_email_order_details
    (4 个参数:
    $order
    $sent_to_admin
    $plain_text
    $email

  • woocommerce_email_order_meta
    (4 个参数:
    $order
    $sent_to_admin
    $plain_text
    $email
  • woocommerce_email_customer_details
    (4 个参数:
    $order
    $sent_to_admin
    $plain_text
    $email
  • woocommerce_email_footer
    (1 个参数:
    $email

这里有一个代码示例,我仅针对“新订单”电子邮件通知:

add_action( 'woocommerce_email_order_details', 'add_custom_text_to_new_order_email', 10, 4 );
function add_custom_text_to_new_order_email( $order, $sent_to_admin, $plain_text, $email ) {
    // Only for "New Order"  email notifications (to be replaced by yours)
    if( ! ( 'new_order' == $email->id ) ) return;

    // Display a custom text (for example)
    echo '<p>'.__('My custom text').'</p>';
}

代码位于子主题的functions.php文件中(或插件中)

© www.soinside.com 2019 - 2024. All rights reserved.