WooCommerce 管理员订单列表自定义列,订单备注发送给客户 [英] WooCommerce admin orders list custom column with order notes sent to customer

查看:66
本文介绍了WooCommerce 管理员订单列表自定义列,订单备注发送给客户的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试创建一个向客户显示备注的列.我希望在 woocommerce 管理和客户订单表中都有这个列.我找到了这段代码,它显示了管理员中的所有笔记.如何更改它以仅显示我写给客户的公共笔记?另外,我如何更改它以在客户上显示我的订单页面?

I am trying to create a column that shows notes to customers. I want this column in both woocommerce admin and customer order table. I found this code and it is showing all notes in admin. How do I alter it to show only public notes I wrote to the customer? Also, how do I alter it to show on customer my order page as well?

  // Code goes in functions.php for your child theme
  // not tested in a PHP snippet plugin
  
  // Add column "Order Notes" on the orders page
  add_filter( 'manage_edit-shop_order_columns', 'add_order_notes_column' );
  function add_order_notes_column( $columns ) {
    $new_columns = ( is_array( $columns ) ) ? $columns : array();
    $new_columns['order_notes'] = 'Order Notes';
    return $new_columns;
  }
  
  add_action( 'admin_print_styles', 'add_order_notes_column_style' );
  function add_order_notes_column_style() {
    $css = '.post-type-shop_order table.widefat.fixed { table-layout: auto; width: 100%; }';
    $css .= 'table.wp-list-table .column-order_notes { min-width: 280px; text-align: left; }';
    $css .= '.column-order_notes ul { margin: 0 0 0 18px; list-style-type: disc; }';
    $css .= '.order_customer_note { color: #ee0000; }'; // red
    $css .= '.order_private_note { color: #0000ee; }'; // blue
    wp_add_inline_style( 'woocommerce_admin_styles', $css );
  }
  
  // Add order notes to the "Order Notes" column
  add_action( 'manage_shop_order_posts_custom_column', 'add_order_notes_content' );
  function add_order_notes_content( $column ) {
    if( $column != 'order_notes' ) return;      
    global $post, $the_order;
    if( empty( $the_order ) || $the_order->get_id() != $post->ID ) {
      $the_order = wc_get_order( $post->ID );
    }    
    $args = array();
    $args['order_id'] = $the_order->get_id();
    $args['order_by'] = 'date_created';
    $args['order'] = 'ASC';
    $notes = wc_get_order_notes( $args );
     if( $notes ) {
      print '<ul>';
      foreach( $notes as $note ) {
        if( $note->customer_note ) {
          print '<li class="order_customer_note">';
        } else {
          print '<li class="order_private_note">';
        }
        $date = date( 'm/d/y H:i', strtotime( $note->date_created ) );
        print $date.' by '.$note->added_by.'<br>'.$note->content.'</li>';
      }
      print '</ul>';
    }
  } // end function

推荐答案

首先,stackOverFlow 上的规则是当时的一个问题.

First the rule on stackOverFlow is one question at the time.

要仅在管理订单列表的自定义列中显示发送给客户的公共订单备注,请使用以下重新访问的代码:

To only display public order notes send to customer in a custom column on admin orders list, use the following revisited code:

// Add custom column on admin orders list page
add_filter( 'manage_edit-shop_order_columns', 'add_order_notes_column' );
function add_order_notes_column( $columns ) {
    $columns['order_notes'] = 'Order Notes';
    return $columns;
}

// CSS styles
add_action( 'admin_print_styles', 'add_order_notes_column_style' );
function add_order_notes_column_style() {
    $css = '.post-type-shop_order table.widefat.fixed { table-layout: auto; width: 100%; }';
    $css .= 'table.wp-list-table .column-order_notes { min-width: 280px; text-align: left; }';
    $css .= '.column-order_notes ul { margin: 0 0 0 18px; list-style-type: disc; }';
    // $css .= '.order_customer_note { color: #ee0000; }'; // red
    // $css .= '.order_private_note { color: #0000ee; }'; // blue
    wp_add_inline_style( 'woocommerce_admin_styles', $css );
}

// Admin orders list custom column displayed content
add_action( 'manage_shop_order_posts_custom_column', 'add_order_notes_content' );
function add_order_notes_content( $column ) {
    global $post, $the_order;

    if( 'order_notes' !== $column )
        return;

    $order = is_a($the_order, 'WC_Order') ? $the_order : wc_get_order( $post->ID );

    $notes = wc_get_order_notes( array(
        'order_id' => $order->get_id(),
        'order_by' => 'date_created',
        'order' => 'ASC',
    ) );

    if( ! empty($notes) ) {
        echo '<ul>';

        foreach( $notes as $note ) {
            if( $note->customer_note && 'system' !== $note->added_by ) {
                echo '<li class="order_customer_note">' . sprintf( __('%s by %s <br> %s:'),
                    date_i18n( 'm/d/y H:i', strtotime( $note->date_created ) ),
                    $note->added_by,
                    $note->content
                ) . '</li>';
            }
        }
        echo '</ul>';
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中.经测试有效.

Code goes in functions.php file of the active child theme (or active theme). Tested and works.

这篇关于WooCommerce 管理员订单列表自定义列,订单备注发送给客户的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆