从 woocommerce 中的电子邮件模板中删除订单信息部分

2 php wordpress woocommerce

我正在尝试删除已完成订单和客户发票电子邮件中的订单信息 部分。

在此输入图像描述

在以下位置找不到如何删除它:

wp-content/plugins/woocommerce/templates/emails/customer-completed-order.php
Run Code Online (Sandbox Code Playgroud)
wp-content/plugins/woocommerce/templates/emails/customer-completed-order.php
Run Code Online (Sandbox Code Playgroud)

请指教。

hel*_*ing 5

您不想删除整个操作挂钩。这可能会影响依赖它存在的其他插件。(更不用说订单详细信息位于woocommerce_email_order_details详细信息挂钩上,而不是woocommerce_email_order_meta挂钩上)。

从所有电子邮件中删除订单详细信息的正确方法是删除其回调函数,该函数WC_Emails::order_details()已添加到woocommerce_email_order_details此处的挂钩中

您不能直接调用remove_action(),因此必须从add_action()回调内部调用它......在将其添加到其挂钩之后但在运行之前。在这种情况下,我们只是要潜入同一个钩子,但优先级更早。另请注意,它必须与您尝试删除的remove_action()优先级相同。add_action()

function so_39251827_remove_order_details( $order, $sent_to_admin, $plain_text, $email ){
    $mailer = WC()->mailer(); // get the instance of the WC_Emails class
    remove_action( 'woocommerce_email_order_details', array( $mailer, 'order_details' ), 10, 4 );
}
add_action( 'woocommerce_email_order_details', 'so_39251827_remove_order_details', 5, 4 );
Run Code Online (Sandbox Code Playgroud)

编辑:使用说明

  1. 停止覆盖emails/customer-completed-order.php模板并将其从主题中删除。您不需要直接编辑它来解决这个问题。
  2. 将上述代码块添加到您的主题functions.php或最好是自定义片段插件,例如这个

编辑#2:仅删除订阅信息

将上面的代码替换为以下代码:

function so_39251827_remove_subscription_details( $order, $sent_to_admin, $plain_text, $email ){
    remove_action( 'woocommerce_email_after_order_table', array( 'WC_Subscriptions_Order', 'add_sub_info_email' ), 15, 3 );
}
add_action( 'woocommerce_email_after_order_table', 'so_39251827_remove_subscription_details', 5, 4 );
Run Code Online (Sandbox Code Playgroud)