处理订单邮件模板中基于产品类别的条件显示
Conditional display based on product category in processing order email template
我正在编写 customer-processing-order.php
WooCommerce 电子邮件模板的代码。
我想显示下面的代码,仅当订单项具有已定义的订购项产品类别时。
<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>
类似于:
if($categ="demo1"){
<p><?php _e( "Your order has been received and is now being processed. Some text here:", 'woocommerce' ); ?></p>
}
这是模板代码的摘录:
<?php
/**
* Customer processing order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-processing-order.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.5.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>
<?php
/**
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Emails::order_schema_markup() Adds Schema.org markup.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::order_meta() Shows order meta data.
*/
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::customer_details() Shows customer details
* @hooked WC_Emails::email_address() Shows email address
*/
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::email_footer() Output the email footer
*/
do_action( 'woocommerce_email_footer', $email );
我该怎么做?
谢谢
这就是您所期待的。我使用 WordPress 原生条件函数 has_term()
。此函数接受术语 ID、术语名称或术语 slug,在单个术语的字符串中或在多个术语的数组中。
您必须定义一个或多个类别(请参阅两个代码中的注释)。
这里是自定义的模板代码(一个类别):
<?php
/**
* Customer processing order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-processing-order.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.5.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
//Define below your category (ID, slug or name)
$category = 'my_category';
$has_category = false;
foreach( $order->get_items() as $order_item ) {
if( has_term( $category, 'product_cat', $order_item["product_id"] ) ) {
$has_category = true;
break;
}
}
/**
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<?php
// Here is your conditional statement based on a defined product category
if( $has_category ){
echo '<p>'. __( "Your order has been received and is now being processed. Some text here:", 'woocommerce' ) .'</p>';
} else {
echo '<p>'. __( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ) .'</p>';
}
?>
<?php
/**
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Emails::order_schema_markup() Adds Schema.org markup.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
# ... etc ...
如果你有多个类别,代码会非常相似:
//Define below your categories in the array (IDs, slugs or names)
$categories = array('my_category1', 'my_category2', 'my_category3');
$has_category = false;
foreach( $order->get_items() as $order_item ) {
if( has_term( $categories, 'product_cat', $order_item["product_id"] ) ) {
$has_category = true;
break;
}
}
所有代码都经过测试并且可以正常工作。
我正在编写 customer-processing-order.php
WooCommerce 电子邮件模板的代码。
我想显示下面的代码,仅当订单项具有已定义的订购项产品类别时。
<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>
类似于:
if($categ="demo1"){
<p><?php _e( "Your order has been received and is now being processed. Some text here:", 'woocommerce' ); ?></p>
}
这是模板代码的摘录:
<?php
/**
* Customer processing order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-processing-order.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.5.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<p><?php _e( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ); ?></p>
<?php
/**
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Emails::order_schema_markup() Adds Schema.org markup.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::order_meta() Shows order meta data.
*/
do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::customer_details() Shows customer details
* @hooked WC_Emails::email_address() Shows email address
*/
do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text, $email );
/**
* @hooked WC_Emails::email_footer() Output the email footer
*/
do_action( 'woocommerce_email_footer', $email );
我该怎么做?
谢谢
这就是您所期待的。我使用 WordPress 原生条件函数 has_term()
。此函数接受术语 ID、术语名称或术语 slug,在单个术语的字符串中或在多个术语的数组中。
您必须定义一个或多个类别(请参阅两个代码中的注释)。
这里是自定义的模板代码(一个类别):
<?php
/**
* Customer processing order email
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/customer-processing-order.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.5.0
*/
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
//Define below your category (ID, slug or name)
$category = 'my_category';
$has_category = false;
foreach( $order->get_items() as $order_item ) {
if( has_term( $category, 'product_cat', $order_item["product_id"] ) ) {
$has_category = true;
break;
}
}
/**
* @hooked WC_Emails::email_header() Output the email header
*/
do_action( 'woocommerce_email_header', $email_heading, $email ); ?>
<?php
// Here is your conditional statement based on a defined product category
if( $has_category ){
echo '<p>'. __( "Your order has been received and is now being processed. Some text here:", 'woocommerce' ) .'</p>';
} else {
echo '<p>'. __( "Your order has been received and is now being processed. Your order details are shown below for your reference:", 'woocommerce' ) .'</p>';
}
?>
<?php
/**
* @hooked WC_Emails::order_details() Shows the order details table.
* @hooked WC_Emails::order_schema_markup() Adds Schema.org markup.
* @since 2.5.0
*/
do_action( 'woocommerce_email_order_details', $order, $sent_to_admin, $plain_text, $email );
# ... etc ...
如果你有多个类别,代码会非常相似:
//Define below your categories in the array (IDs, slugs or names)
$categories = array('my_category1', 'my_category2', 'my_category3');
$has_category = false;
foreach( $order->get_items() as $order_item ) {
if( has_term( $categories, 'product_cat', $order_item["product_id"] ) ) {
$has_category = true;
break;
}
}
所有代码都经过测试并且可以正常工作。