如果默认情况下不可用,如何将“$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>';
}
我已经检查了平台上的许多线程。但是没有线程解释如何直接在模板中使用条件 $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>';
}