Cuando tienes una tienda en línea y los clientes van acumulando pedidos, debería ser prácticamente obligatorio que les permitas ordenar los pedidos, al menos por su estado, para que no tengan que navegar sin orden ni criterio, lo considero un básico ¿no te parece?
Pues resulta que con WooCommerce no es posible, salen ahí todos, a lo loco…
No como para los administradores y gestores de la tienda, que sí pueden filtrar los pedidos.
¿Estamos de acuerdo en que no nos mataría que los clientes también pudiesen filtrar sus pedidos como nosotros, por el estado del pedido?
Mira qué fácil, solo tienes que copiar y pegar este código:
/* Filtrado por estado del pedido en cuenta de cliente */ // 1. Obtener parametros de URL add_filter( 'woocommerce_my_account_my_orders_query', 'ayudawp_micuenta_filtrar_estado_pedidos' ); function ayudawp_micuenta_filtrar_estado_pedidos( $args ) { if ( isset( $_GET['status'] ) && ! empty( $_GET['status'] ) ) { $args['status'] = array( $_GET['status'] ); } return $args; } // 2. Mostrar la lista de filtros add_action( 'woocommerce_before_account_orders', 'ayudawp_mostrar_filtros_micuenta' ); function ayudawp_mostrar_filtros_micuenta() { echo '<p>Filtrar por: '; $customer_orders = 0; foreach ( wc_get_order_statuses() as $slug => $name ) { $status_orders = count( wc_get_orders( [ 'status' => $slug, 'customer' => get_current_user_id(), 'limit' => -1 ] ) ); if ( $status_orders > 0 ) { if ( isset( $_GET['status'] ) && ! empty( $_GET['status'] ) && $_GET['status'] == $slug ) { echo '<b>' . $name . ' (' . $status_orders . ')</b><span class="delimit"> - </span>'; } else echo '<a href="' . add_query_arg( 'status', $slug, wc_get_endpoint_url( 'orders' ) ) . '">' . $name . ' (' . $status_orders . ')</a><span class="delimit"> - </span>'; } $customer_orders += $status_orders; } if ( isset( $_GET['status'] ) && ! empty( $_GET['status'] ) ) { echo '<a href="' . remove_query_arg( 'status' ) . '">Todos (' . $customer_orders . ')</a>'; } else echo '<b>Todos (' . $customer_orders . ')</b>'; echo '</p>'; } // 3. Ajuste de paginacion add_filter( 'woocommerce_get_endpoint_url', 'ayudawp_ajuste_paginar_filtrado_estado_micuenta', 9999, 4 ); function ayudawp_ajuste_paginar_filtrado_estado_micuenta( $url, $endpoint, $value, $permalink ) { if ( 'orders' == $endpoint && isset( $_GET['status'] ) && ! empty( $_GET['status'] ) ) { return add_query_arg( 'status', $_GET['status'], $url ); } return $url; }
Y ahora el cliente ya podrá filtrar sus pedidos por el estado de los mismos.
¿No te parece que es algo que deberíamos ofrecer a nuestros clientes en todas las tiendas online?
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!