我正在尝试在 WooCommerce 订单表视图中创建一个新列。并使用订单中自定义元键的详细信息填充它。仅当购买者选择交货日期时,只有部分订单才会具有此元键值。使用 WooCommerce Product Add-Ons Ultimate 插件将交货日期选项添加到订单中。
我已成功创建新列,但似乎无法显示自定义元键的结果,即
_Choose Date
每个订单都会返回输出“元键”错误或未找到订单项的输出,即如果不存在值会显示什么。
我的代码在这里:
function custom_shop_order_column( $columns ) {
// Add new columns
$columns['delivery_date'] = __( 'Delivery Date', 'woocommerce' );
return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 10, 1 );
// Populate the Column
function custom_shop_order_list_column_content( $column, $post_id ) {
// Get order object
$order = wc_get_order( $post_id );
// Is a WC_Order
if ( is_a( $order, 'WC_Order' ) ) {
// Initialize
$delivery_date_arr = array();
// Loop trough order items
foreach ( $order->get_items() as $item_key => $item ) {
// Get meta, use the correct meta key!
$delivery_date = $item->get_meta( '_Choose Date' );
// NOT empty
if ( ! empty ( $delivery_date ) ) {
// Push to array
$delivery_date_arr[] = $delivery_date;
}
}
// Compare column name
if ( $column == 'delivery_date' ) {
// NOT empty
if ( ! empty ( $delivery_date_arr ) ) {
// Output
echo '<ul>';
echo '<li>' . implode( '</li><li>', $delivery_date_arr ) . '</li>';
echo '</ul>';
} else {
// Output
echo __( 'Meta key is wrong or not found for the order items', 'woocommerce' );
}
}
}
}
add_action( 'manage_shop_order_posts_custom_column' , 'custom_shop_order_list_column_content', 10, 2 );```
当您获得正确的元密钥时,这是改进的版本代码:
// Add new columns
add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 10, 1 );
function custom_shop_order_column( $columns ) {
$columns['delivery_date'] = __( 'Delivery Date', 'woocommerce' );
return $columns;
}
// Populate the Column
add_action( 'manage_shop_order_posts_custom_column' , 'custom_shop_order_list_column_content', 10, 2 );
function custom_shop_order_list_column_content( $column, $post_id ) {
if ( $column === 'delivery_date' ) {
global $the_order; // The order object
$delivery_dates_html = ''; // Initialize
// Loop trough order items
foreach ( $the_order->get_items() as $item ) {
// Get meta, use the correct meta key!
if ( $delivery_date = $item->get_meta( 'Choose Delivery Date' ) ) {
$delivery_dates_html .= '<li>' . $delivery_date . '</li>';
}
}
if (! empty( $delivery_dates_html ) > 0 ) {
echo '<ul>' . $delivery_dates_html . '</ul>';
} else {
_e("No date", "woocommerce");
}
}
}
它应该能更好地工作。