我试图显示每个客户总共花了多少钱,而没有包括运费。除了计算之外,下面代码中的所有内容(创建一个新列并使其可排序)都可以正常工作。
第37行出现错误:
$money_spent = wc_get_customer_total_spent( $user_id ) - $order->get_total_tax() - $order->get_total_shipping() - $order->get_shipping_tax(), wc_get_price_decimals(), '.', '' );
这是我使用的所有代码=>
class Total_Spent_By_Customer_WooCommerce {
public function __construct() {
add_action( 'init', array( &$this, 'init' ) );
}
public function init() {
add_filter( 'manage_users_columns', array( $this,'users_columns') );
add_action( 'manage_users_custom_column', array( $this ,'users_custom_column'), 10, 3);
add_filter( 'manage_users_sortable_columns', array( $this ,'users_sortable_columns') );
add_filter( 'users_list_table_query_args', array( $this ,'users_orderby_column'), 10, 1 );
add_action( 'plugins_loaded', array( $this ,'load_this_textdomain') );
}
public static function users_columns( $columns ) {
unset($columns['posts']);
$columns['money_spent'] = _x( 'Money Spent', 'user', 'total-spent-by-customer-for-woocommerce' );
return $columns;
}
public static function users_custom_column( $value, $column_name, $user_id ) {
if ( 'money_spent' != $column_name ) {
return $value;
} else {
$money_spent = wc_get_customer_total_spent( $user_id ) - $order->get_total_tax() - $order->get_total_shipping() - $order->get_shipping_tax(), wc_get_price_decimals(), '.', '' );
return wc_price( wc_get_customer_total_spent ( $user_id ));
}
}
public static function users_sortable_columns($columns) {
$custom = array(
'money_spent' => 'money_spent',
);
return wp_parse_args( $custom, $columns );
}
public static function users_orderby_column( $args ) {
if ( isset( $args['orderby'] ) && 'money_spent' == $args['orderby'] ) {
$args = array_merge( $args, array(
'meta_key' => '_money_spent',
'orderby' => 'meta_value_num',
));
}
return $args;
}
public function load_this_textdomain() {
load_plugin_textdomain( 'total-spent-by-customer-for-woocommerce' );
}
}
new Total_Spent_By_Customer_WooCommerce();
我真的很感谢任何帮助。
答案 0 :(得分:0)
更新2
使用wc_get_customer_total_spent( $user_id )
函数无法获得没有运费和税金总额的客户总支出,因为您需要删除当前客户已完成的每个订单的税金和运费。
此外,您无法在函数中获取和使用WC_Order
对象。因此无法使用WC_Order
方法get_total_tax()
,get_total_shipping()
和get_shipping_tax()
。
替代方式:无需花费运费和税金即可获得客户的总支出:
基于wc_get_customer_total_spent()
函数所涉及的the SQL Woocommerce query source code,我们可以构建您自己的查询。
因此您将用以下代码替换功能:
public static function users_custom_column( $value, $column_name, $user_id ) {
if ( 'money_spent' == $column_name ) {
global $wpdb;
$statuses = array_map( 'esc_sql', wc_get_is_paid_statuses() );
$spent = $wpdb->get_var("
SELECT SUM(pm2.meta_value - (pm3.meta_value + pm4.meta_value))
FROM $wpdb->posts as p
LEFT JOIN {$wpdb->postmeta} AS pm ON p.ID = pm.post_id
LEFT JOIN {$wpdb->postmeta} AS pm2 ON p.ID = pm2.post_id
LEFT JOIN {$wpdb->postmeta} AS pm3 ON p.ID = pm3.post_id
LEFT JOIN {$wpdb->postmeta} AS pm4 ON p.ID = pm4.post_id
WHERE pm.meta_key = '_customer_user'
AND pm.meta_value = '" . esc_sql( $user_id ) . "'
AND p.post_type = 'shop_order'
AND p.post_status IN ( 'wc-" . implode( "','wc-", $statuses ) . "' )
AND pm2.meta_key = '_order_total'
AND pm3.meta_key = '_order_tax'
AND pm4.meta_key = '_order_shipping'
");
if ( ! $spent ) {
$spent = 0;
}
$value = wc_price( $spent );
}
return $value;
}
经过测试,效果很好。
计算注释:
当您从订单中删除总税时,无需删除运输税(因为它们已包含在总税中)。
因此,我们只删除总税额和总运费(不包括税额)。