So passen Sie WooCommerce-Berichte für einen Mehrwährungsladen an
Ein Multi-Währungs-Shop bringt WooCommerce-Berichte leise durcheinander: Gesamtsummen in verschiedenen Währungen werden addiert, als wären sie dieselbe Zahl.
WooCommerce Currency Switcher kann standardmäßig nicht mit WooCommerce-Berichten arbeiten, da es dort keine Hooks gibt und ein Plug-in nicht möglich ist. Aber nach einigen Untersuchungen des WooCommerce-Codes habe ich einen Weg gefunden, Berichte für Bestellungen mit verschiedenen Währungen anzupassen (funktioniert nur für Berichte->Bestellungen->„Verkäufe nach Datum“):- Öffnen Sie die Datei wp-content\plugins\woocommerce\includes\admin\reports\class-wc-admin-report.php
- Suchen Sie dort die öffentliche Funktion get_order_report_data
- Fügen Sie am Ende derselben Funktion vor dem Code return $result; diesen Code ein:
$result = apply_filters('woocs_reports_get_order_report_query', $result, $args); - Öffnen Sie die Datei functions.php Ihres aktuellen WordPress-Themes und fügen Sie am Ende derselben Datei den folgenden Code ein:
add_filter('woocs_reports_get_order_report_query', function($result, $args) { if (is_array($result) AND isset($result[0]->total_sales)) { global $wpdb; global $WOOCS; $range = '7day'; if (isset($_GET['range'])) { $range = $_GET['range']; } $start_date = ''; $end_date = date('Y-m-d 23:59:59'); switch ($range) { case 'custom': $start_date = $_GET['start_date']; break; case '7day': $start_date = date('Y-m-d 00:00:00', time() - 7 * DAY_IN_SECONDS); break; case 'month': $start_date = date('Y-m-01 00:00:00'); break; case 'year': $start_date = date('Y-01-01 00:00:00'); break; default: $start_date = date('Y-m-d 00:00:00', time() - 7 * DAY_IN_SECONDS); break; } $order_status = "wc-" . implode('","wc-', $args['order_status']); //*** $sql = $wpdb->prepare('SELECT ID FROM ' . $wpdb->posts . ' WHERE post_type=%s AND post_status IN("' . $order_status . '") AND post_date >= %s AND post_date < %s', 'shop_order', $start_date, $end_date); $tmp = $wpdb->get_results($sql, ARRAY_N); $orders = array(); $result = array(); if (!empty($tmp)) { foreach ($tmp as $v) { $orders[] = $v[0]; } $result = array(); $currencies = $WOOCS->get_currencies(); foreach ($orders as $order_id) { $tmp = array(); $order = new WC_Order($order_id); $_order_currency = get_post_meta($order_id, '_order_currency', true); $order_rate = get_post_meta($order_id, '_woocs_order_rate', true); if (!$order_rate) { if (isset($currencies[$_order_currency])) { $order_rate = $currencies[$_order_currency]['rate']; } else { continue; } } if ($_order_currency != $WOOCS->default_currency) { $tmp['total_sales'] = $WOOCS->back_convert(get_post_meta($order_id, '_order_total', true), $order_rate, 4); $tmp['total_shipping'] = $WOOCS->back_convert(get_post_meta($order_id, '_order_shipping', true), $order_rate, 4); $tmp['total_tax'] = $WOOCS->back_convert(get_post_meta($order_id, '_order_tax', true), $order_rate, 4); $tmp['total_shipping_tax'] = $WOOCS->back_convert(get_post_meta($order_id, '_order_shipping_tax', true), $order_rate, 4); } else { $tmp['total_sales'] = get_post_meta($order_id, '_order_total', true); $tmp['total_shipping'] = get_post_meta($order_id, '_order_shipping', true); $tmp['total_tax'] = get_post_meta($order_id, '_order_tax', true); $tmp['total_shipping_tax'] = get_post_meta($order_id, '_order_shipping_tax', true); } $tmp['post_date'] = $order->order_date; $result[] = (object) $tmp; } } } return $result; }, 10, 2);