【问题标题】:WooCommerce add order note to orderCompleted emailWooCommerce 将订单备注添加到 orderCompleted 电子邮件
【发布时间】:2016-08-02 07:18:40
【问题描述】:

我在这里束手无策,已经尝试了几天我可以在网上找到的所有解决方案,但没有任何效果。最糟糕的是,这个问题应该可以用大约 4 行代码来解决,但它就是行不通。

我需要什么: 当订单完成电子邮件发出时,我希望将订单备注(不是客户备注,实际订单备注)添加到电子邮件中。之后我可以过滤它们,但我似乎根本无法让笔记出现在电子邮件中。这是订单注释的示例……关于订单:

到目前为止,我已经尝试过这段代码:

::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,这是用户在下订单时添加到订单中的cmets。比如:“我的狗会捡我的包裹,他的名字很幸运”

我还写了一个 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>';
}

我真的不知道为什么这不起作用。看起来应该,但它什么也没做。

如果有人有解决方案可以将这些笔记打印到我的电子邮件中……就像在这张图片中看到的那样……我会永远爱你。

【问题讨论】:

  • 你试过过滤钩woocommerce_email_order_meta_fields吗? githubhookr.io 上的一些参考资料
  • 问题是我不需要输入和访问新数据;只需将现有的订单备注数据添加到电子邮件中。我可以这样做,但会出现同样的问题:如何访问管理员订单备注?如果我能得到它们,其余的都是可以解决的;尚未找到将它们输入变量的方法
  • 好吧,看看代码(woocommerce 的订单完成电子邮件),您想要实现的可能是默认功能。
  • 如果您的问题还没有解决,也许Add Order Notes To WooCommerce Completed Order Email可以帮助您。
  • 我从那篇文章开始,这只是我后来发现并构建自己的插件中的代码,以及我用来显示它们的其他 3 个来源。没有工作。解决后,我将发布解决方案;但是当你实现他的代码时,那篇文章是垃圾并且充满了php错误。

标签: php woocommerce


【解决方案1】:

在您的主题文件夹中创建一个名为 woocommerce 的文件夹。在此文件夹中,创建一个名为 emails 的新文件夹,并在此文件夹中复制 wp-content/plugins/woocommerce/templates/emails 中的 customer-completed-order.php。并在第 51 行添加这个 sn-p:Refer 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】:

    尝试将此代码添加到您的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>';
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        【解决方案4】:

        稍后再回答;但总比没有好。我最终使用的最终代码如下所示:

        ?>
        <h2><?php _e( 'Tracking ID', 'woocommerce' ); ?></h2>
        <?php 
        $comments =  $order->get_customer_order_notes();
        $customer_comments = $order->get_order_notes();
        
        foreach( $comments as $comment ){
            if ( strpos( $comment -> comment_content, "MyTracking" ) !== false ){
                echo $comment -> comment_content . '<br />';
            }
        }
        foreach( $customer_comments as $comment_2 ){
            if ( strpos( $comment_2 -> comment_content, "filterText" ) !== false ){
                echo $comment_2 -> comment_content . '<br />';
            }
        }
        

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

        然后它添加了客户和管理员注释。我还添加了一个过滤器,因为我的主要目标是将跟踪数据发布到管理订单备注中,并在他们完成的订单电子邮件中发送给客户。

        【讨论】:

          【解决方案5】:

          我偶然发现了这个较旧的线程,正在寻找一种方法来包含客户在管理员收到的 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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-10
            • 2014-04-24
            • 1970-01-01
            相关资源
            最近更新 更多