php - 在 WooCommerce 我的帐户订单列表中添加发送给客户的管理员订单备注
问题描述
基于WooCommerce 管理员订单列表自定义列以及发送给客户答案代码的订单注释,我尝试添加以下代码以在 WooCommerce 我的帐户订单列表中创建一个新列,但未成功,我已更改manage_edit-shop_order_columns
为woocommerce_my_account_my_orders_columns
钩子,例如:
// Add custom column on admin orders list page
add_filter( 'woocommerce_my_account_my_orders_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( 'woocommerce_my_account_my_orders_columns', '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>';
}
}
我希望这个专栏的内容是一样的,但我希望标题说“下载”。
更新:这是我希望专栏去的屏幕截图:
解决方案
您的代码中有很多错误... 要将管理员在我的帐户订单中发送的客户订单备注显示为新列,请改用以下内容:
// Add custom column on admin orders list page
add_filter( 'woocommerce_my_account_my_orders_columns', 'add_myaccount_admin_order_notes_column' );
function add_myaccount_admin_order_notes_column( $columns ) {
$column_actions = $columns['order-actions'];
unset($columns['order-actions']);
$columns['admin-notes'] = __('Admin Notes', 'woocommerce');
$columns['order-actions'] = $column_actions;
return $columns;
}
// CSS styles
add_action( 'wp_head', 'myaccount_admin_order_notes_inline_style', 100 );
function myaccount_admin_order_notes_inline_style() {
if( is_account_page() && is_wc_endpoint_url('orders') ) :
?><style>ul.order-note-item {list-style:none; margin:0;} ul.order-note-item > li { margin:0 0 6px;}</style><?php
endif;
}
// Admin orders list custom column displayed content
add_action( 'woocommerce_my_account_my_orders_column_admin-notes', 'add_myaccount_admin_order_notes_content' );
function add_myaccount_admin_order_notes_content( $order ) {
$notes = wc_get_order_notes( array(
'order_id' => $order->get_id(),
'order_by' => 'date_created',
'order' => 'ASC',
) );
if( ! empty($notes) ) {
$output = [];
foreach( $notes as $note ) {
if( $note->customer_note && 'system' !== $note->added_by ) {
$output[] = sprintf( __('%s <br> %s'),
date_i18n( 'm/d/y H:i', strtotime( $note->date_created ) ),
$note->content
);
}
}
echo '<ul class="order-note-item"><li>'. implode('</li><li>', $output) .'</li></ul>';
}
}
代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。
推荐阅读
- javascript - Video.js - 如何向 video.js 播放器添加多个音轨?
- php - 如何通过按钮从列表中传递变量
- php - 将新的 XML 数据插入 XML 的特定位置
- python - Twitter API:使用 Python 抓取可用于地理参考推文的数据
- python - 为什么函数里面的client会报错?
- python - 查找特定字符串的行并在该行之后读取文本文件
- swiftui - 在 SwiftUI 中的行之间均匀分布换行文本
- exec - 打开管道进行写入时程序堆栈
- python - 从 Python 脚本调用 bash 脚本时收到错误“bc: command not found”
- azure - Azure RBAC 自定义角色