我想在WooCommerce的 "管理订单列表 "页面中增加一栏,告知我该用户是否是第一次购买。
我认为这个"检查客户是否已经在WooCommerce购买了东西"可以用于我的情况。
但是我不知道如何在WooCommerce的 "订单 "页面的一栏中添加。
有了这一功能,我想在 "管理订单列表 "页面中增加一栏,告知我用户是否是第一次购买。
manage_edit-shop_order_columns
&manage_shop_order_posts_custom_column
你可以添加一个新的列。使用
wc_get_customer_order_count( $user_id )
您可以得到一个客户的总订单。
注1: 因为客人没有
$user_id
,我们使用$billing_email
以确定当前和以前的订单。
注释2: 我部分使用了以下的方法 功能 - CREDITS: @LoicTheAztec
那么你就会得到
// Add a Header
function my_shop_order_column( $columns ) {
// Add new column
$columns['first_order'] = 'First order';
return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'my_shop_order_column', 10, 1 );
// Populate the Column
function my_shop_order_list_column_content( $column, $post_id ) {
// Compare
if ( $column == 'first_order' ) {
// Get order
$order = wc_get_order( $post_id );
// Get user id
$user_id = $order->get_user_id();
// Set variable
$output = '';
// Not a guest
if ( $user_id > 0 ) {
// Get the total orders by a customer.
$count = wc_get_customer_order_count( $user_id );
} else {
// Guest 'user', don't have a user id so we will determine the previous orders based on the billing email
// Get billing email
$billing_email = $order->get_billing_email();
if ( ! empty ( $billing_email ) ) {
// Call function
$count = has_guest_bought_by_email( $billing_email );
}
}
// Output
if ( $count == 1 ) {
$output = 'First order';
} elseif ( $count > 1 ) {
$output = 'Total orders = ' . $count;
}
echo $output;
}
}
add_action( 'manage_shop_order_posts_custom_column' , 'my_shop_order_list_column_content', 10, 2 );
// CREDITS: @LoicTheAztec - https://stackoverflow.com/a/46216073/11987538
function has_guest_bought_by_email( $email ) {
global $wpdb;
// Get all order statuses.
$order_statuses = array_map( 'esc_sql', array_keys( wc_get_order_statuses() ) );
$results = $wpdb->get_col( "
SELECT p.ID FROM {$wpdb->prefix}posts AS p
INNER JOIN {$wpdb->prefix}postmeta AS pm ON p.ID = pm.post_id
WHERE p.post_status IN ( '" . implode( "','", $order_statuses ) . "' )
AND p.post_type LIKE 'shop_order'
AND pm.meta_key = '_billing_email'
AND pm.meta_value = '$email'
" );
// Return result
return count( $results );
}