WooCommerce provides a powerful filtering system that allows you to sort and filter orders by various criteria. One way to filter orders is by using the “pre_get_posts” action, which is a WordPress action that is triggered before the main query is executed.

Here’s an example of how you can use “pre_get_posts” to filter orders by a custom field:

function filter_orders_by_custom_field( $query ) {
    // only filter the main query on the 'shop_order' post type
    if ( ! $query->is_main_query() || 'shop_order' !== $query->get( 'post_type' ) ) {
    // check if custom field is set
    if ( ! empty( $_GET['custom_field'] ) ) {
        $query->set( 'meta_query', array(
                'key'     => 'custom_field',
                'value'   => $_GET['custom_field'],
                'compare' => 'LIKE',
        ) );
add_action( 'pre_get_posts', 'filter_orders_by_custom_field' );

This code will filter orders by a custom field called “custom_field”. You should replace ‘custom_field’ with the actual name of the custom field that you want to filter by.

It’s important to note that, you’ll also need to add a way for the users to select the custom field value, typically a form or a select dropdown, to the order page to allow them to filter orders.

Additionally, you can filter orders by other criteria such as date, order status, customer, payment method and more. You can use the query variables provided by WooCommerce such as ‘post_status’, ‘_customer_user’, ‘_payment_method’ to filter orders by these criteria.

(Visited 41 times, 1 visits today)
Was this article helpful?
Close Search Window