【问题标题】:woocommerce order notes in order preview订单预览中的 woocommerce 订单备注
【发布时间】:2021-04-02 12:55:52
【问题描述】:

我正在尝试在订单预览中添加所有手动管理注释。 我想在下面使用他们的日期和时间,使用小文本并按照与后端相同的方式进行排序。

我写的代码是:

//order note code
add_action( 'woocommerce_admin_order_preview_start', 'woocommerce_admin_order_preview_order_note' );
function woocommerce_admin_order_preview_order_note() {
   
      ?>
     <!-- <# if ( data.data.customer_note ) { #> -->
          <div class="wc-order-preview-order-note-container">
              <div class="wc-order-preview-custom-note">
                  <h2 class="order-note">Order Note:</h2><br>
                  {{ data.data.woocommerce_order_notes }}
              </div>
          </div>
    <!--<# } #> -->
    <?php   
}

但似乎这种数据方法 {{ data.data.field_id }} 不适用于它。 如果我尝试全局发布或 $order 功能,预览不会打开。 有什么建议吗?

目标截图:

【问题讨论】:

    标签: php jquery wordpress woocommerce


    【解决方案1】:

    woocommerce_admin_order_preview_end 动作钩子没有参数。所以首先你必须使用woocommerce_admin_order_preview_get_order_details 动作钩子,你可以在其中访问$order 对象

    对于订单备注,您可以使用wc_get_order_notes 功能,您可以使用检查他们的参数here

    // Add order notes so you can accees in `woocommerce_admin_order_preview_start`
    add_filter( 'woocommerce_admin_order_preview_get_order_details', 'admin_order_preview_add_order_notes_data', 10, 2 );
    function admin_order_preview_add_order_notes_data( $data, $order ) {
            
        $notes = wc_get_order_notes([
            'order_id' => $order->get_id(),
        ]);
    
        ob_start();
    
        ?>
        <div class="wc-order-preview-order-note-container" style="padding: 20px;">
            <div class="wc-order-preview-custom-note">
            <h2 class="order-note">Order Note:</h2>
                <ul class="order_notes">
                    <?php
                    if ( $notes ) {
                        foreach ( $notes as $note ) {
                            $css_class   = array( 'note' );
                            $css_class[] = $note->customer_note ? 'customer-note' : '';
                            $css_class[] = 'system' === $note->added_by ? 'system-note' : '';
                            $css_class   = apply_filters( 'woocommerce_order_note_class', array_filter( $css_class ), $note );
                            ?>
                            <li rel="<?php echo absint( $note->id ); ?>" class="<?php echo esc_attr( implode( ' ', $css_class ) ); ?>">
                                <div class="note_content">
                                    <?php echo wpautop( wptexturize( wp_kses_post( $note->content ) ) ); // @codingStandardsIgnoreLine ?>
                                </div>
                                <p class="meta">
                                    <abbr class="exact-date" title="<?php echo esc_attr( $note->date_created->date( 'Y-m-d H:i:s' ) ); ?>">
                                        <?php
                                        
                                        echo esc_html( sprintf( __( '%1$s at %2$s', 'woocommerce' ), $note->date_created->date_i18n( wc_date_format() ), $note->date_created->date_i18n( wc_time_format() ) ) );
                                        ?>
                                    </abbr>
                                    <?php
                                    if ( 'system' !== $note->added_by ) :
                                        
                                        echo esc_html( sprintf( ' ' . __( 'by %s', 'woocommerce' ), $note->added_by ) );
                                    endif;
                                    ?>
                                    <a href="#" class="delete_note" role="button"><?php esc_html_e( 'Delete note', 'woocommerce' ); ?></a>
                                </p>
                            </li>
                            <?php
                        }
                    } else {
                        ?>
                        <li class="no-items"><?php esc_html_e( 'There are no notes yet.', 'woocommerce' ); ?></li>
                        <?php
                    }
                    ?>
                </ul>
            </div>
        </div>
        <?php
    
        $order_notes = ob_get_clean();  
    
        $data['order_notes'] = $order_notes;
    
        return $data;
    
    }
    
    //order notes
    add_action( 'woocommerce_admin_order_preview_start', 'woocommerce_admin_order_preview_order_notes' );
    function woocommerce_admin_order_preview_order_notes() {
        ?> {{{data.order_notes}}} <?php
    }
    

    经过测试并且有效。

    【讨论】:

    • 它工作正常,但显示系统注释 + 批量编辑操作
    • 我们可以编写代码以手动运行只显示笔记吗?
    • 隐藏系统备注+批量编辑操作备注
    • 对不起,还是不明白。你能提出一些问题的截图吗?
    • 你的意思是你想只显示那些你手动添加的笔记?
    猜你喜欢
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 2022-01-20
    • 2019-08-29
    • 1970-01-01
    • 2018-08-08
    • 2021-10-28
    • 2017-05-24
    相关资源
    最近更新 更多