问题描述
我们希望在管理订单详细信息概览中显示订单中的供应商。我们使用下面代码中的一些部分来显示发票中每个产品的供应商。现在我们要显示订单中实际有哪些供应商以供管理员概览。
- 如果订单中只有一个供应商的商品 => 结果:=> 供应商:供应商 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',1 );
解决方法
我不使用 dokan 插件,但 woocommerce_admin_order_data_after_billing_address
钩子包含 order
对象作为传递的变量,而不是 $product_id
。
所以你可以通过循环获取订单对象等。 我相信这应该足够了
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 );