2016-09-20 6 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、用語名または用語のスラッグを受け入れます。

カテゴリまたはカテゴリを定義する必要があります(両方のコードのコメントを参照)。ここで

は、(1つのカテゴリ用)カスタマイズされたテンプレートコードです:

<?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()

関連する問題