2016-09-20 36 views
2

我正在處理的代碼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); 

我怎樣才能做到這一點?

謝謝

回答

3

這裏就是你所期待的。我使用WordPress本地條件功能has_term()。此函數接受術語ID,術語名稱或術語段落,單個術語的字符串或多個術語的陣列。

您必須定義您的類別或類別(請參閱兩種代碼中的註釋)。

這裏是定製的模板代碼(一類)

<?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; 
    } 
} 

所有代碼都經過測試,加工。


參考:WordPress Function Reference — has_term()

相關問題