Skip to content Skip to sidebar

This thread is resolved. Here is a description of the problem and solution.

Problem:
The client is experiencing two issues: 1. WooCommerce analytics reports are not downloading for currencies like USD and Euro, instead, they are being sent via email. 2. There is a speed issue on the admin side due to background queries.
Solution:
For the first issue, it was determined that this behavior aligns with WooCommerce's settings. When there are many order items, WooCommerce is configured to send an email instead of downloading the CSV file directly. This is not an issue with WooCommerce Multilingual or WPML.
For the second issue, we provided a custom code solution to add a 'Direct Export (Browser)' button to the Analytics report page. This button allows for direct downloading of the report without waiting for an email. Here is the code to implement:

function add_custom_export_button() { ?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            const interval = setInterval(function() {
                const downloadButton = $('.woocommerce-table__download-button');
                if (downloadButton.length) {
                    const customExportButton = $('<button class="button-primary" style="margin-left: 10px;">Direct Export (Browser)</button>')
                        .on("click", function(e) {
                            e.preventDefault();
                            fetchAndDownloadCSV();
                        });
                    downloadButton.after(customExportButton);
                    clearInterval(interval);
                }
            }, 500);
        });
    </script>
<?php }
add_action('admin_footer', 'add_custom_export_button');
function custom_export_script() { ?>
    <script type="text/javascript">
        async function fetchAndDownloadCSV() {
            try {
                const response = await fetch('<?php echo admin_url('admin-ajax.php?action=custom_order_export'); ?>');
                const data = await response.json();
                if (data && data.orders) {
                    let csvContent = "data:text/csv;charset=utf-8,";
                    const headers = ["Order ID", "Date", "Status", "Total"];
                    csvContent += headers.join(",") + "\r\n";
                    data.orders.forEach(order => {
                        const row = [order.id, order.date, order.status, order.total];
                        csvContent += row.join(",") + "\r\n";
                    });
                    const encodedUri = encodeURI(csvContent);
                    const link = document.createElement("a");
                    link.setAttribute("href", encodedUri);
                    link.setAttribute("download", "orders_export.csv");
                    document.body.appendChild(link);
                    link.click();
                    document.body.removeChild(link);
                } else {
                    alert("No order data found.");
                }
            } catch (error) {
                console.error("Export failed:", error);
                alert("There was an error fetching the order data.");
            }
        }
    </script>
<?php }
add_action('admin_footer', 'custom_export_script');
function custom_order_export() {
    if (!current_user_can('manage_woocommerce')) {
        wp_send_json_error("Unauthorized", 403);
    }
    $orders = wc_get_orders(array(
        'limit' => -1,
        'orderby' => 'date',
        'order' => 'DESC',
        'return' => 'ids',
    ));
    $order_data = array();
    foreach ($orders as $order_id) {
        $order = wc_get_order($order_id);
        $order_data[] = array(
            'id' => $order->get_id(),
            'date' => $order->get_date_created()->date('Y-m-d H:i:s'),
            'status' => $order->get_status(),
            'total' => $order->get_total(),
        );
    }
    wp_send_json(array('orders' => $order_data));
}
add_action('wp_ajax_custom_order_export', 'custom_order_export');

https://wpml.org/forums/topic/woocommerce-analytics-report-not-downloading-for-other-currency-speed-issue-at-admin-side-2/page/2/#post-16351152

https://wpml.org/forums/topic/woocommerce-analytics-report-not-downloading-for-other-currency-speed-issue-at-admin-side-2/page/2/#post-16351442

If this solution does not resolve your issue or seems irrelevant due to being outdated or not applicable to your specific case, we highly recommend checking related known issues at https://wpml.org/known-issues/, verifying the version of the permanent fix, and confirming that you have installed the latest versions of themes and plugins. If further assistance is needed, please feel free to open a new support ticket at WPML support forum.

This is the technical support forum for WPML - the multilingual WordPress plugin.

Everyone can read, but only WPML clients can post here. WPML team is replying on the forum 6 days per week, 22 hours per day.

Tagged: 

This topic contains 22 replies, has 0 voices.

Last updated by Bigul 1 year ago.

Assisted by: Bigul.

Author Posts
October 23, 2024 at 8:57 am #16320800

Bigul

Hello,

I can reproduce the issue in a minimal setup on your staging site. So shared the details with our team for an expert opinion. We will get back to you as soon as possible. Please wait.

--
Thanks!

Bigul

October 24, 2024 at 4:50 pm #16327479

sagiS

Hello,
Any progress?

October 25, 2024 at 7:49 am #16329370

Bigul

Hello,

Our second-tier team is currently working on this ticket. We will get back to you as early as possible. Please wait.

--
Thanks!

Bigul

October 28, 2024 at 6:16 am #16335848

sagiS

Hello,

What's the update on this ticket?

October 28, 2024 at 4:43 pm #16339091

Bigul

Hello,

Sorry for the delay. Our second-tier team is still working on this bug, we will get back to you soon when we have an update from our team. Please wait. Thank you for your patience.

--
Thanks!

Bigul

October 30, 2024 at 4:40 pm #16348527

sagiS

Hello,

What sorry? Its been a month when this ticket was created and still you have not came to know whats the issue here. This is seriously not acceptable.

Also you wanted the staging and so I have created that for you and given all the access required to you.

I also have production website and we are facing this issue from last 5-6 months. I want this issue to be solved ASAP.

October 31, 2024 at 11:46 am #16351152

Bigul

Hello,

We understand your position and appreciate your patience. This was a challenging case for us, as our team struggled to debug it without a local copy of the site. However, we managed to replicate the issue on a fresh installation by creating over 1000 orders with a custom script.

Unfortunately, this behavior appears to be aligned with WooCommerce’s settings rather than an issue with WooCommerce Multilingual or WPML. For example, when there are many order items (like your USD orders), WooCommerce is configured to send an email. If there are fewer than two pages of orders, the CSV file will download directly. Once you have a minimum of 26 orders, the email option in WooCommerce becomes active.

Thank you for your kind understanding. Please feel free to ping us if you need any further assistance with WPML. We are happy to help always.

--
Thanks!

Bigul

October 31, 2024 at 12:53 pm #16351442

Bigul

Hello,

Maybe as a workaround, you can achieve it by adding a Download button to the Analytics report. Please try the following code after a full site backup and check whether it gives you the expected results or not. Refer to the attached images for more details.

function add_custom_export_button() {
	?>
    <script type="text/javascript">
        jQuery(document).ready(function($) {
            // Check for WooCommerce's download button to confirm the page has loaded
            const interval = setInterval(function() {
                const downloadButton = $('.woocommerce-table__download-button');

                // If WooCommerce download button is found, add the custom export button
                if (downloadButton.length) {
                    const customExportButton = $('<button class="button-primary" style="margin-left: 10px;">Direct Export (Browser)</button>')
                        .on("click", function(e) {
                            e.preventDefault();
                            fetchAndDownloadCSV();
                        });

                    // Append the button after WooCommerce's default download button
                    downloadButton.after(customExportButton);

                    // Clear the interval to stop checking
                    clearInterval(interval);
                }
            }, 500); // Check every 500ms
        });
    </script>
	<?php
}
add_action('admin_footer', 'add_custom_export_button');

function custom_export_script() {
	?>
    <script type="text/javascript">
        async function fetchAndDownloadCSV() {
            try {
                const response = await fetch('<?php echo admin_url('admin-ajax.php?action=custom_order_export'); ?>');
                const data = await response.json();

                if (data && data.orders) {
                    let csvContent = "data:text/csv;charset=utf-8,";
                    // Add CSV headers
                    const headers = ["Order ID", "Date", "Status", "Total"];
                    csvContent += headers.join(",") + "\r\n";

                    // Add data rows
                    data.orders.forEach(order => {
                        const row = [order.id, order.date, order.status, order.total];
                        csvContent += row.join(",") + "\r\n";
                    });

                    // Trigger CSV download
                    const encodedUri = encodeURI(csvContent);
                    const link = document.createElement("a");
                    link.setAttribute("href", encodedUri);
                    link.setAttribute("download", "orders_export.csv");
                    document.body.appendChild(link);
                    link.click();
                    document.body.removeChild(link);
                } else {
                    alert("No order data found.");
                }
            } catch (error) {
                console.error("Export failed:", error);
                alert("There was an error fetching the order data.");
            }
        }
    </script>
	<?php
}
add_action('admin_footer', 'custom_export_script');
function custom_order_export() {
	// Check for user capability
	if (!current_user_can('manage_woocommerce')) {
		wp_send_json_error("Unauthorized", 403);
	}

	// Fetch WooCommerce orders
	$orders = wc_get_orders(array(
		'limit' => -1,
		'orderby' => 'date',
		'order' => 'DESC',
		'return' => 'ids',
	));

	$order_data = array();
	foreach ($orders as $order_id) {
		$order = wc_get_order($order_id);
		$order_data[] = array(
			'id' => $order->get_id(),
			'date' => $order->get_date_created()->date('Y-m-d H:i:s'),
			'status' => $order->get_status(),
			'total' => $order->get_total(),
		);
	}

	wp_send_json(array('orders' => $order_data));
}
add_action('wp_ajax_custom_order_export', 'custom_order_export');

--
Thanks!

Bigul

image.png
November 2, 2024 at 3:46 am #16356313

sagiS

Hello,

Okay I will try the code and update you.

November 4, 2024 at 8:36 am #16359243

Bigul

Hello,

Thank you for the updates. Take your time. We will wait for your feedback.

--
Thanks!

Bigul

November 6, 2024 at 9:00 am #16370207
sagiS

Hello,

I have also reported second issue i.e "What steps can I take to address the speed issue at the admin side caused by background queries?". So your team has checked this issue or not?

We are facing admin side speed issue because of WPML background queries running. Please update me for this issue ASAP.

New threads created by Bigul and linked to this one are listed below:

https://wpml.org/forums/topic/background-queries-slowing-down-my-site-coming-up-on-each-refreshs/

November 6, 2024 at 2:19 pm #16372516

Bigul

Hello,

Thank you for the updates. Please note that I have opened a new ticket for the *Performance related probems*, as per our support policies, we can only address one issue per ticket. This will help us serve you better and avoid discussing multiple problems in a single ticket. I will get back to you soon on the latest ticket. Please wait. Thank you for your understanding.

--
Thanks!

Bigul

November 6, 2024 at 4:55 pm #16374110

sagiS

Hello,

Please do not close this thread as still I have not tested your code on our production.

Thanks

November 7, 2024 at 5:25 am #16375202

Bigul

Hello,

Thank you for the updates. Take your time. The ticket will not be closed for two weeks. We will wait for your feedback.

--
Thanks!

Bigul

November 14, 2024 at 10:35 am #16401695

sagiS

Hello,

There are few points to discuss on this thread are as follows:

1. for the code you provided is downloading all orders from single ajax request which I think creates a load on server as we have 50k-60k orders so this code needs to be modified.

2. Can you provide the code which can work with above filters like date and currency? So that we can download monthly report or based on currency.

3. for Euro currency, why we are not receiving email. Also it is not showing inside Mail Log.

Please give the answers of above questions ASAP.

Thanks