WooCommerce将订单备注添加到orderCompleted电子邮件中

时间:2016-04-11 22:25:49

标签: php woocommerce

我在我的智慧结束,并尝试了我可以在网上找到的所有解决方案几天没有任何作用。最糟糕的是问题应该可以在大约4行代码中解决,但它只是不起作用。

我需要什么: 当订单完成电子邮件发出时,我希望订单备注(不是客户备注,实际的订单备注)添加到电子邮件中。我之后可以通过它们进行过滤,但我似乎无法将注释显示在电子邮件中。这是订单上的订单备注的示例: order notes

到目前为止,我已尝试过此代码:

:: PHP ::

<?php
$comments = $order->get_customer_order_notes();
if($comments){
    echo '<h2>' . _e( 'Order Notes', 'woocommerce' ) . '</h2>';
    foreach($comments as $comment) {
        echo $comment->comment_content . '<br />';
    }
}
?>

这基本上是我需要的,除了它的目标是customer_order_notes,这是用户在放置时添加到订单中的注释。喜欢:“我的狗会拿起我的包裹,他的名字很幸运”

我还写了一个lugin来获得基于其他民族的笔记,基础就是这样:

:: PHP ::

add_action( 'woocommerce_email_order_meta', 'bl_add_order_notes_to_completed_email', 10 );

function bl_add_order_notes_to_completed_email() {
    global $woocommerce, $post;
    // If the order is not completed then don't continue.
//    if ( get_post_status( $post->ID ) != 'wc-completed' ){
//        return false;
//    }

    $args = array(
        'post_id' => $post->ID,
        'status'  => 'approve',
        'type'    => 'order_note'
    );

    // Fetch comments
    $notes = get_comments( $args );

    echo '<h2>' . _e( 'Order Notes', 'woocommerce' ) . '</h2>';
    echo '<ul class="order_notes" style="list-style:none; padding-left:0px;">';

    // Check that there are order notes
    if ( $notes ) {
        // Display each order note
        foreach( $notes as $note ) {
            ?>
            <li style="padding:0px -10px;">
                <div class="note_content" style="background:#d7cad2; padding:10px;">
                    <?php echo wpautop( wptexturize( $note->comment_content ) ); ?>
                </div>

                <p class="meta">
                    <abbr class="exact-date" title="<?php echo $note->comment_date; ?>"><?php printf( __( 'added on %1$s at %2$s', 'woocommerce-customer-order-notes-completed-order-emails' ), date_i18n( wc_date_format(), strtotime( $note->comment_date ) ), date_i18n( wc_time_format(), strtotime( $note->comment_date ) ) ); ?></abbr>
                    <?php if ( $note->comment_author !== __( 'WooCommerce', 'woocommerce-customer-order-notes-completed-order-emails' ) ) printf( ' ' . __( 'by %s', 'woocommerce-customer-order-notes-completed-order-emails' ), $note->comment_author ); ?>
                </p>
            </li>
            <?php
        }
    }
    echo '</ul>';
}

我真的不知道为什么那不起作用。它看起来应该但它什么都不做。

如果任何人有一个解决方案将这些笔记打印到我的电子邮件中...就像在这张图片中看到的那样......我将永远爱你。 enter image description here

5 个答案:

答案 0 :(得分:1)

尝试将此代码添加到您的functions.php中:

add_action( 'woocommerce_email_before_order_table', 'wc_add_order_notes_to_completed_emails', 10, 1 );
function wc_add_order_notes_to_completed_emails($order) {
    if ( $email->id == 'customer_completed_order' ) {
        echo '<h2>' . __( 'Order Notes', 'woocommerce' ) . '</h2>';
        $order_notes = $order->get_customer_order_notes();
        foreach ( $order_notes as $order_note ) {
            echo '<p>' . $order_note->comment_content . '<p>';
        }
    }
}

答案 1 :(得分:0)

在主题文件夹中创建一个名为woocommerce的文件夹。在此文件夹中,创建一个名为emails的新文件夹,并在该文件夹中复制 wp-content / plugins / woocommerce / templates / emails 中的customer-completed-order.php。并在第51行添加此代码段:请参考this article

<h2><?php _e( 'Order Notes', 'woocommerce' ); ?></h2>

<?php
$args = array(
    'status' => 'approve',
    'post_id' => $order->id
);
$comments = get_comments($args);
foreach($comments as $comment) :
    echo $comment->comment_content . '<br />';
endforeach;
?>

答案 2 :(得分:0)

我一直在尝试实现与Ecolis相同的目标,并遇到了可能对其他用户有所帮助的解决方案。我只是想在电子邮件中回显订购单。在子主题文件夹的电子邮件模板中,我编写了以下代码:

<?php echo wpautop( wptexturize( make_clickable( $customer_note ) ) );  ?>

代码源-https://github.com/woocommerce/woocommerce/blob/master/templates/emails/customer-note.php

答案 3 :(得分:0)

稍后再回答;但总比没有好。我最终使用的最终代码可以正常工作,直到今天仍在运行:

post

此文件放置在电子邮件模板 customer-completed-order.php 中,该模板取自woocommerce插件的 templates / emails / 目录。我将代码放在所需的位置,并将 customer-completed-order.php 文件放在我的子主题中的根目录中以下文件夹: woocommerce / emails / customer-completed-order.php

然后添加了客户注释和管理注释。我还添加了一个过滤器,因为我的主要目标是获取跟踪数据,该跟踪数据会以完整的订单电子邮件的形式发送到发送给客户的管理订单中。

答案 4 :(得分:0)

我偶然发现了这个较旧的线程,正在寻找一种方法来包含客户在管理员收到的 Woocommerce 新订单电子邮件的结账页面上的“订单备注”中放置的备注。

@Martyn Gray 在上面发布的代码运行良好:

echo wpautop( wptexturize( make_clickable( $customer_note ) ) );

我将 Woocommerce admin-new-order.php 电子邮件模板复制到我的子主题中,并将其添加到现有代码“用户定义的附加内容”中。

这是原始代码:

/**
* Show user-defined additional content - this is set in each email's settings.
*/
if ( $additional_content ) {
echo wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
}

这是更新的代码:

/**
 * Show user-defined additional content - this is set in each email's settings.
 */
if ( $additional_content ) {
    echo wp_kses_post( wpautop( wptexturize( $additional_content ) ) );
echo wpautop( wptexturize( make_clickable( $customer_note ) ) );
}

客户的备注现在出现在所有 Woocommerce 电子邮件中,包括新订单、发票等。

WP v5.6.2 WC v5.0.0

希望对关注的人有所帮助。