我正在尝试添加一列来显示产品表中的行号。我通过这个片段添加了一个专栏:
add_action('woocommerce_admin_order_item_headers', 'add_number_of_row_order_items_header');
function add_number_of_row_order_items_header() {
echo '<th> NO. </th>';
}
function get_number_of_row_item($_product, $item, $item_id = null) {
$value = 1; // how can i get current NO. of row?
echo '<td>' . $value . '</td>';
}
add_action('woocommerce_admin_order_item_values', 'get_number_of_row_item', 10, 3);
但是不知道如何动态获取行号?在我目前的代码中,数字是硬编码的,这显然不是我的意图。有什么建议吗?
更新
我找到了一种通过JS/JQuery添加行号的方法:
$('.woocommerce_order_items > thead > tr').prepend('<td style="background: #f8f8f8;padding: 18px;">NO.</td>');
var x = $('.woocommerce_order_items > tbody > tr').length;
for (let i = 1; i < x ; i++){
$(`.woocommerce_order_items > tbody > tr:nth-child(${i})`).prepend(`<td class='order-counter'>${i}</td>`);
}
$('tr.shipping td.order-counter').text('')
默认情况下,在您使用的钩子中不提供行号,并且由于钩子是逐行调用的,因此在钩子本身添加计数器变量是没有用的,因为每次调用都会覆盖它。
所以你必须自己提供这些,这可以在全局变量的基础上完成。
所以你得到了:
// Add header
function action_woocommerce_admin_order_item_headers( $order ) {
// Set the column name
$column_name = __( 'NO.', 'woocommerce' );
// Display the column name
echo '<th class="my-class">' . $column_name . '</th>';
}
add_action( 'woocommerce_admin_order_item_headers', 'action_woocommerce_admin_order_item_headers', 10, 1 );
// Add content
function action_woocommerce_admin_order_item_values( $product, $item, $item_id ) {
if ( method_exists( $item, 'is_type' ) ) {
// Only for "line_item" items type, to avoid errors
if ( ! $item->is_type( 'line_item' ) ) return;
echo '<td>' . get_number() . '</td>';
}
}
add_action( 'woocommerce_admin_order_item_values', 'action_woocommerce_admin_order_item_values', 10, 3 );
// Custom function
function get_number() {
// NOT isset (counter)
if ( ! isset( $GLOBALS['number'] ) ) {
$GLOBALS['number'] = 1;
} else {
// Plus 1
$GLOBALS['number'] += 1;
}
return $GLOBALS['number'];
}
您可以这样使用它:
function my_woocommerce_admin_order_item_headers() {
$column_name = 'TEXT';
echo '<th>' . $column_name . '</th>';
}
add_action('woocommerce_admin_order_item_values', 'my_woocommerce_admin_order_item_values', 10, 3);
function my_woocommerce_admin_order_item_values($_product, $item, $item_id = null) {
$value = 50;
if($item['type']=="line_item")
echo '<td>' . $value . '</td>';
}