在 WooCommerce 订单列表中显示 Dokan 自定义订单元数据
Display Dokan custom order meta data in WooCommerce order list
在 WooCommerce 中,我使用 Dokan Multivendor 并希望在一列中显示订单的供应商商店名称。默认情况下,Dokan 显示订单的作者姓名而不是商店名称。
基于,我创建了这个代码片段来做到这一点:
// Create column
function wc_new_order_column( $columns ) {
$columns['vendor_store_name_order'] = __( 'Vendor');
return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'wc_new_order_column' );
// Display vendor or vendors of the order
function action_woocommerce_admin_order_vendor( $order ) {
foreach ( $order->get_items() as $item ) {
// Get product object
$product = $item->get_product();
// Author id
$author_id = $product->post->post_author;
// Shopname
$vendor = dokan()->vendor->get( $author_id );
$shop_name = $vendor->get_shop_name();
// NOT in array
if ( ! in_array( $shop_name, $shop_names ) ) {
// Push to array
$shop_names[] = $shop_name;
// Filter URL for other orders from same vendor => When click, show all other orders from that vendor
$vendor_orders = get_admin_url() . 'edit.php?post_type=shop_order&vendor_id=' . $author_id;
// Column Output
if ( $column == 'vendor_store_name_order' ) {
printf('<a href="%s">%s</a>', $vendor_orders, $shop_name);
}
}
}
}
add_action( 'manage_shop_order_posts_custom_column', 'action_woocommerce_admin_order_vendor', 10, 2 );
目前代码无效。 foreach 循环的订单项存在问题。我想访问订单,然后检查其中的项目以检查它是哪个供应商。然后用数组显示每个有该订单产品的供应商。
但是对于每个电流,我无法以正确的方式访问订单信息。我必须如何访问它?
您的代码中有一些错误。可以简化优化如下:
// Add a new column to admin orders list
add_filter( 'manage_edit-shop_order_columns', 'wc_new_order_column' );
function wc_new_order_column( $columns ) {
$columns['store_name'] = __( 'Vendor');
return $columns;
}
// Display the linked vendor(s) shop names(s) for each order in the custom columns
add_action( 'manage_shop_order_posts_custom_column', 'action_woocommerce_admin_order_vendor', 10, 2 );
function action_woocommerce_admin_order_vendor( $column ) {
if ( 'store_name' === $column ) {
global $post, $the_order;
$order = is_a($the_order, 'WC_Order') ? $the_order : wc_get_order( $post->ID );
$link = get_admin_url() . 'edit.php?post_type=shop_order&vendor_id=';
$data = array(); // Initializing
foreach ( $order->get_items() as $item ) {
$authid = get_post_field( 'post_author', $item->get_product_id() );
if ( ! in_array( $authid, array_keys($data) ) ) {
$vendor = dokan()->vendor->get($authid);
$shop_name = $vendor->get_shop_name();
$data[$authid] = '<a href="'.$link.$authid.'">'.$shop_name.'</a>';
}
}
echo implode('<br>', $data); // Output
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它现在应该可以工作了。
在 WooCommerce 中,我使用 Dokan Multivendor 并希望在一列中显示订单的供应商商店名称。默认情况下,Dokan 显示订单的作者姓名而不是商店名称。
基于
// Create column
function wc_new_order_column( $columns ) {
$columns['vendor_store_name_order'] = __( 'Vendor');
return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'wc_new_order_column' );
// Display vendor or vendors of the order
function action_woocommerce_admin_order_vendor( $order ) {
foreach ( $order->get_items() as $item ) {
// Get product object
$product = $item->get_product();
// Author id
$author_id = $product->post->post_author;
// Shopname
$vendor = dokan()->vendor->get( $author_id );
$shop_name = $vendor->get_shop_name();
// NOT in array
if ( ! in_array( $shop_name, $shop_names ) ) {
// Push to array
$shop_names[] = $shop_name;
// Filter URL for other orders from same vendor => When click, show all other orders from that vendor
$vendor_orders = get_admin_url() . 'edit.php?post_type=shop_order&vendor_id=' . $author_id;
// Column Output
if ( $column == 'vendor_store_name_order' ) {
printf('<a href="%s">%s</a>', $vendor_orders, $shop_name);
}
}
}
}
add_action( 'manage_shop_order_posts_custom_column', 'action_woocommerce_admin_order_vendor', 10, 2 );
目前代码无效。 foreach 循环的订单项存在问题。我想访问订单,然后检查其中的项目以检查它是哪个供应商。然后用数组显示每个有该订单产品的供应商。
但是对于每个电流,我无法以正确的方式访问订单信息。我必须如何访问它?
您的代码中有一些错误。可以简化优化如下:
// Add a new column to admin orders list
add_filter( 'manage_edit-shop_order_columns', 'wc_new_order_column' );
function wc_new_order_column( $columns ) {
$columns['store_name'] = __( 'Vendor');
return $columns;
}
// Display the linked vendor(s) shop names(s) for each order in the custom columns
add_action( 'manage_shop_order_posts_custom_column', 'action_woocommerce_admin_order_vendor', 10, 2 );
function action_woocommerce_admin_order_vendor( $column ) {
if ( 'store_name' === $column ) {
global $post, $the_order;
$order = is_a($the_order, 'WC_Order') ? $the_order : wc_get_order( $post->ID );
$link = get_admin_url() . 'edit.php?post_type=shop_order&vendor_id=';
$data = array(); // Initializing
foreach ( $order->get_items() as $item ) {
$authid = get_post_field( 'post_author', $item->get_product_id() );
if ( ! in_array( $authid, array_keys($data) ) ) {
$vendor = dokan()->vendor->get($authid);
$shop_name = $vendor->get_shop_name();
$data[$authid] = '<a href="'.$link.$authid.'">'.$shop_name.'</a>';
}
}
echo implode('<br>', $data); // Output
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。它现在应该可以工作了。