在新订单电子邮件中显示自定义产品字段

时间:2016-01-17 23:24:12

标签: woocommerce

我在名为 course-date 的商品中创建了自定义字段。我把它作为一个日期,例如1月30日。这是我在电子邮件中的内容,但没有任何显示..我错过了什么?使用下面的新代码段编辑的代码

enter image description here

    <?php
/**
 * Customer processing order email
 *
 * @author      WooThemes
 * @package     WooCommerce/Templates/Emails
 * @version     2.4.0
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

?>

<?php
$items = $order->get_items();
foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
    $course_date=get_post_meta($product_id, 'course-date', true);
    //Note $course_date will get overwritten if there are more than one items in the order.
}
?>

<?php do_action('woocommerce_email_header', $email_heading); ?>

<p>This email is to notify you of your recent registration for the <b>Level 1 - Think and Grow Rich Institute Course</b>!</p>

<p>You are registered to attend on:</p>

<p><?php printf( __( '<b>Registration ID:</b> %s', 'woocommerce' ), $order->get_order_number() ); ?></p>
<p><b>Course Registration Date:</b> <?php echo get_post_meta($post->id, 'course-date', true); ?></p>
<p><b>Time:</b> 8am Registration - 9am Event Begins (<a href="http://allfansnomoney.com/thinkandgrowrich/tentative-schedule/" target="_blank">See Full Schedule</a>)</p>
<p><b>Location:</b> 240 Belfield Rd, Toronto, ON M9W 1H3</p>

<p>If you have any questions please contact us by e-mail: <a href="mailto:contact@thinkandgrowrichinstitute.com">contact@thinkandgrowrichinstitute.com</a>.</p>

<p>Sincerely,<BR/>
The Think and Grow Rich Institute Team</p><BR/>

<p><em><b>"Whatever The Mind Can Conceive and Believe, It Will Achieve."</b> - Napoleon Hill</em></p>

<?php do_action( 'woocommerce_email_before_order_table', $order, $sent_to_admin, $plain_text ); ?>

<?php do_action( 'woocommerce_email_after_order_table', $order, $sent_to_admin, $plain_text ); ?>

<?php do_action( 'woocommerce_email_order_meta', $order, $sent_to_admin, $plain_text ); ?>

<?php do_action( 'woocommerce_email_customer_details', $order, $sent_to_admin, $plain_text ); ?>

<?php do_action( 'woocommerce_email_footer' ); ?>

2 个答案:

答案 0 :(得分:3)

希望您能从这个答案中了解更多信息,它会增加您对WooCommerce的了解。

对于您发送的“客户处理订单电子邮件”的摘录。

系统无法在此处找到$ _product-&gt; id的值。所以它不起作用。

您必须通过在初始测试电子邮件中打印产品ID本身来调试它。

如果您无法获得产品ID。这里有更多信息。

订单可能包含多个产品。因此,使用元字段查找产品可能会很麻烦,尤其是当您对哪个产品应该显示元字段的问题时。

简单的方法是使用给定的对象$ order从此对象中检索订单ID,然后找到按此顺序关联的所有产品,然后找到这些产品的元字段值。

<?php
$items = $order->get_items();
foreach ( $items as $item ) {
    $product_name = $item['name'];
    $product_id = $item['product_id'];
    $product_variation_id = $item['variation_id'];
    $course_date=get_post_meta($product_id, 'course-date', true);
    if(isset($course_date) && $course_date!=""){
      echo "<p><b>Course Registration Date:</b>".$course_date."</p>";
   }
}
?>

让我们知道这是否能让您对此问题有所了解。

答案 1 :(得分:2)

这是一个未经测试的示例,说明如何将字符串添加到&#34; customer_processing_email&#34;不覆盖模板。您可以将此代码添加到主题functions.php中,文本应显示在订单表之前。

add_action( 'woocommerce_email_order_details', 'kia_custom_order_details', 5, 4 );
function kia_custom_order_details( $order, $sent_to_admin, $plain_text, $email ){

    if( $email->id == "customer_processing_order" ){

        $course_date = null;

        // borrowing the loop from WisdmLabs's answer
        $items = $order->get_items();

        foreach ( $items as $item ) {
            $product_name = $item['name'];
            $product_id = $item['product_id'];
            $product_variation_id = $item['variation_id'];
            $course_date = get_post_meta($product_id, 'course-date', true);
            if( $course_date != '' ) break; //break out of the loop if we find a course date
        }

        if( $course_date && $plain_text ){

            echo "Course Registration Date: " . $course_date . "\n\n";

        } else if( $course_date && ! $plain_text ){

            echo "<p><b>Course Registration Date:</b> " . $course_date . "</p>" . "/n/n";

        }

    }
}

不要忘记富文本与纯文本电子邮件的不同格式。我将剩余文本的大部分格式留给了您,因为重要的部分是查找/打印课程日期元。

我仍然认为在这里使用单独的电子邮件是最好的方法,但据我所知,只是错过了在正确位置回显$course_date