WC_Admin_Dashboard::get_top_seller()
Get top seller from DB.
Method of the class: WC_Admin_Dashboard{}
Hooks from the method
Returns
Object
.
Usage
// private - for code of main (parent) class only $result = $this->get_top_seller();
WC_Admin_Dashboard::get_top_seller() WC Admin Dashboard::get top seller code WC 9.8.5
private function get_top_seller() { global $wpdb; $hpos_enabled = OrderUtil::custom_orders_table_usage_is_enabled(); $orders_table = OrderUtil::get_table_for_orders(); $orders_column_id = $hpos_enabled ? 'id' : 'ID'; $orders_column_type = $hpos_enabled ? 'type' : 'post_type'; $orders_column_status = $hpos_enabled ? 'status' : 'post_status'; $orders_column_date = $hpos_enabled ? 'date_created_gmt' : 'post_date_gmt'; $query = array(); $query['fields'] = "SELECT SUM( order_item_meta.meta_value ) as qty, order_item_meta_2.meta_value as product_id FROM {$orders_table} AS orders"; $query['join'] = "INNER JOIN {$wpdb->prefix}woocommerce_order_items AS order_items ON orders.{$orders_column_id} = order_id "; $query['join'] .= "INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS order_item_meta ON order_items.order_item_id = order_item_meta.order_item_id "; $query['join'] .= "INNER JOIN {$wpdb->prefix}woocommerce_order_itemmeta AS order_item_meta_2 ON order_items.order_item_id = order_item_meta_2.order_item_id "; $query['where'] = "WHERE orders.{$orders_column_type} IN ( '" . implode( "','", wc_get_order_types( 'order-count' ) ) . "' ) "; /** * Allows modifying the order statuses used in the top seller query inside the dashboard status widget. * * @since 2.2.0 * * @param string[] $order_statuses Order statuses. */ $order_statuses = apply_filters( 'woocommerce_reports_order_statuses', array( OrderStatus::COMPLETED, OrderStatus::PROCESSING, OrderStatus::ON_HOLD ) ); $query['where'] .= "AND orders.{$orders_column_status} IN ( 'wc-" . implode( "','wc-", $order_statuses ) . "' ) "; $query['where'] .= "AND order_item_meta.meta_key = '_qty' "; $query['where'] .= "AND order_item_meta_2.meta_key = '_product_id' "; $query['where'] .= "AND orders.{$orders_column_date} >= '" . gmdate( 'Y-m-01', current_time( 'timestamp' ) ) . "' "; // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp.Requested $query['where'] .= "AND orders.{$orders_column_date} <= '" . gmdate( 'Y-m-d H:i:s', current_time( 'timestamp' ) ) . "' "; // phpcs:ignore WordPress.DateTime.CurrentTimeTimestamp.Requested $query['groupby'] = 'GROUP BY product_id'; $query['orderby'] = 'ORDER BY qty DESC'; $query['limits'] = 'LIMIT 1'; /** * Allows modification of the query to determine the top seller product in the dashboard status widget. * * @since 2.2.0 * * @param array $query SQL query parts. */ $query = apply_filters( 'woocommerce_dashboard_status_widget_top_seller_query', $query ); $sql = implode( ' ', $query ); return $wpdb->get_row( $sql ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared }