如果默认情况下不可用,如何将“$email”传递给 WooCommerce 电子邮件模板文件

How to pass "$email" to WooCommerce emails template files if not available by default

我已经检查了平台上的许多线程。但是没有线程解释如何直接在模板中使用条件 $email>id 参数。

这是我在email-header.php中的内容:

<div style="width:600px;" id="template_header_image">
    <?php
    if ( $img = get_option( 'woocommerce_email_header_image' ) ) {
        echo '<p style="margin-top:0;"><img width="80%" height="auto" src="' . esc_url( $img ) . '" alt="' . get_bloginfo( 'name', 'display' ) . '" /></p>';
    }
    if( $email->id == 'customer_processing_order'  ) {
        echo '<img alt="order in processing" src="https/example.com/image.png" />';
}
?>                          
</div>

src 就是一个例子。 if( $email->id == 'customer_processing_order' ) 不工作。

似乎没有提取参数 $email。我试着用 global $email 来调用它;但这也行不通。

有什么建议吗?

在/includes/class-wc-emails.php中我们看到只有$email_heading通过wc_get_template()

传递
/**
 * Get the email header.
 *
 * @param mixed $email_heading Heading for the email.
 */
public function email_header( $email_heading ) {
    wc_get_template( 'emails/email-header.php', array( 'email_heading' => $email_heading ) );
}

所以要通过 $email->id 我们必须使用变通方法,首先我们将使变量全局可用。


1) 这可以通过不同的挂钩来完成,但 woocommerce_email_header 挂钩似乎最适合这种特定情况:

// Header - set global variable
function action_woocommerce_email_header( $email_heading, $email ) {
    $GLOBALS['email_id'] = $email->id;
} 
add_action( 'woocommerce_email_header', 'action_woocommerce_email_header', 10, 2 );

代码进入活动子主题(或活动主题)的 functions.php 文件。

2) 然后在想要的模板文件中可以使用:

2.1) 把它放在 if ( ! defined( 'ABSPATH' ) ) {..}

之后
// Getting the email ID global variable
$ref_name_globals_var = isset( $GLOBALS ) ? $GLOBALS : '';
$email_id = isset( $ref_name_globals_var['email_id'] ) ? $ref_name_globals_var['email_id'] : '';

2.2) 并在所需位置,朝向输出

// Targeting specific email. Multiple statuses can be added, separated by a comma
if ( in_array( $email_id, array( 'new_order', 'customer_processing_order' ) ) ) {
    // Desired output
    echo '<p style="color: red; font-size: 20px;">Your output</p>';
}