WooCommerce 在管理订单详细信息概述中显示供应商商店名称 (Dokan)
WooCommerce show vendor store-name (Dokan) in admin order details overview
我们想在管理员订单详细信息概览中显示订单的供应商。我们使用下面代码中的一些部分来显示发票中每个产品的供应商。现在我们要显示哪个供应商实际在订单中以供管理员查看。
- 如果订单中只有一个供应商的商品 => 结果:=> 供应商:供应商 A
- 如果订单中有来自不同供应商的商品 => 结果:=> 供应商:供应商 A、供应商 B、供应商 C
这是我们目前所拥有的:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'get_dokan_vendor_shop_name_from_order_test', 10, 1 );
function get_dokan_vendor_shop_name_from_order_test( $product_id ) {
if( empty($product_id) ) return;
$seller = get_post_field( 'post_author', $product_id );
$author = get_user_by( 'id', $seller );
$vendor = dokan()->vendor->get( $seller );
$store_info = dokan_get_store_info( $author->ID );
echo '<h4>' . __('TEST 1 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
if ( ! empty( $store_info['store_name'] ) ) {
return $vendor->get_shop_name();
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
} else {
return;
}
}
更新
根据新信息,这是我们目前所拥有的:它显示供应商,但如果一个订单有来自供应商 A 的 2 件商品,那么它会显示供应商 A 三次。
所以我们现在只是输出有问题。供应商订单信息现在可用,但输出不是我们想要的方式。
function action_woocommerce_admin_order_data_after_billing_address( $order ) {
// Loop through order items
foreach ( $order->get_items() as $item ) {
// Get product object
$product = $item->get_product();
// Seller
$seller = $product->post->post_author;
// Author
$author = get_user_by( 'id', $seller );
// Store info
$store_info = dokan_get_store_info( $author->ID );
// Vendor
$vendor = dokan()->vendor->get( $seller );
// Output Vendor in order - TEST 1
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
}
// Output Vendor in order - TEST 2
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'action_woocommerce_admin_order_data_after_billing_address', 10, 1 );
我不使用 dokan 插件,但 woocommerce_admin_order_data_after_billing_address
挂钩包含 order
对象作为传递变量,而不是 $product_id
.
所以可以通过order对象等循环获取商品。
我相信这应该足够了
function action_woocommerce_admin_order_data_after_billing_address( $order ) {
// Empty array
$shop_names = array();
// Output
echo '<h4>' . __( 'Vendor in order: ', 'woocommerce' ) . '</h4>';
// Loop through order items
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();
// OR JUST USE THIS FOR SHOPNAME
// Shop name
// $shop_name = dokan()->vendor->get( $author_id )->get_shop_name();
// NOT in array
if ( ! in_array( $shop_name, $shop_names ) ) {
// Push to array
$shop_names[] = $shop_name;
// Output
echo '<p>' . $shop_name . '</p>';
}
}
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'action_woocommerce_admin_order_data_after_billing_address', 10, 1 );
我们想在管理员订单详细信息概览中显示订单的供应商。我们使用下面代码中的一些部分来显示发票中每个产品的供应商。现在我们要显示哪个供应商实际在订单中以供管理员查看。
- 如果订单中只有一个供应商的商品 => 结果:=> 供应商:供应商 A
- 如果订单中有来自不同供应商的商品 => 结果:=> 供应商:供应商 A、供应商 B、供应商 C
这是我们目前所拥有的:
add_action( 'woocommerce_admin_order_data_after_billing_address', 'get_dokan_vendor_shop_name_from_order_test', 10, 1 );
function get_dokan_vendor_shop_name_from_order_test( $product_id ) {
if( empty($product_id) ) return;
$seller = get_post_field( 'post_author', $product_id );
$author = get_user_by( 'id', $seller );
$vendor = dokan()->vendor->get( $seller );
$store_info = dokan_get_store_info( $author->ID );
echo '<h4>' . __('TEST 1 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
if ( ! empty( $store_info['store_name'] ) ) {
return $vendor->get_shop_name();
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
} else {
return;
}
}
更新
根据新信息,这是我们目前所拥有的:它显示供应商,但如果一个订单有来自供应商 A 的 2 件商品,那么它会显示供应商 A 三次。
所以我们现在只是输出有问题。供应商订单信息现在可用,但输出不是我们想要的方式。
function action_woocommerce_admin_order_data_after_billing_address( $order ) {
// Loop through order items
foreach ( $order->get_items() as $item ) {
// Get product object
$product = $item->get_product();
// Seller
$seller = $product->post->post_author;
// Author
$author = get_user_by( 'id', $seller );
// Store info
$store_info = dokan_get_store_info( $author->ID );
// Vendor
$vendor = dokan()->vendor->get( $seller );
// Output Vendor in order - TEST 1
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
}
// Output Vendor in order - TEST 2
echo '<h4>' . __('TEST 2 - Vendor in order') . ' (' . $vendor->get_shop_name() . ')</h4>';
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'action_woocommerce_admin_order_data_after_billing_address', 10, 1 );
我不使用 dokan 插件,但 woocommerce_admin_order_data_after_billing_address
挂钩包含 order
对象作为传递变量,而不是 $product_id
.
所以可以通过order对象等循环获取商品。 我相信这应该足够了
function action_woocommerce_admin_order_data_after_billing_address( $order ) {
// Empty array
$shop_names = array();
// Output
echo '<h4>' . __( 'Vendor in order: ', 'woocommerce' ) . '</h4>';
// Loop through order items
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();
// OR JUST USE THIS FOR SHOPNAME
// Shop name
// $shop_name = dokan()->vendor->get( $author_id )->get_shop_name();
// NOT in array
if ( ! in_array( $shop_name, $shop_names ) ) {
// Push to array
$shop_names[] = $shop_name;
// Output
echo '<p>' . $shop_name . '</p>';
}
}
}
add_action( 'woocommerce_admin_order_data_after_billing_address', 'action_woocommerce_admin_order_data_after_billing_address', 10, 1 );