Filtrar pedidos por estado en WooCommerce

Existen muchos plugins que te ayudaran con esto pero también te instalaran cosas y código que no necesitas, por eso te dejo este bloque de código con el que podrás agregar un filtro por estados en tus pedidos.

Opcion 1

Descarga e instala el plugin.

Opcion 2

Agrega este bloque de codigo en tu archivo de functions. Este bloque solo agregara los filtros en tu ventana de pedidos y nada más.

No olvides que este bloque de código va en el archivo functions.php o utilizando el plugin de Code Snippets.

<?php  

add_action( 'restrict_manage_posts','marcode_filtros_por_estado');

function marcode_filtros_por_estado() {

// Obtenemos el post type
  global $typenow;

  //Validamos que estemos en el post type de shop_order (/wp-admin/edit.php?post_type=shop_order)
  if ( 'shop_order' === $typenow ) {

    // obtenemos todos los estatus de las ordenes
    $order_statuses = wc_get_order_statuses();
    ?>

    <!-- Creamos nuestro select para imprimir nuestros estatus -->
    <select name="_shop_order_status" id="_shop_order_status">
      <option value="">
        <?php esc_html_e( 'Todos los estados', 'wc-filter-orders-by-status' ); ?>
      </option>
      <?php
//      Recorremos todos los estados e imprimimos las opciones
      foreach ( $order_statuses as $key=>$statusname ) {
        ?>
        <option value="<?php echo esc_html($key); ?>" <?php echo esc_attr( isset( $_GET['_shop_order_status'] ) ? selected(esc_html($key), $_GET['_shop_order_status'], false ) : '' ); ?>>
          <?php echo esc_html($statusname); ?>
        </option>
        <?php
      }
      ?>
    </select>
    <?php
  }
}

// Añadimos un filtro para alterar las variables de filtrado que se envian al momento de dar clic en filtrar.
add_filter( 'request','marcode_filtros_por_estado_consulta');
function marcode_filtros_por_estado_consulta( $vars ) {
  global $typenow;
  if ( 'shop_order' === $typenow && isset( $_GET['_shop_order_status'] ) && ! empty( $_GET['_shop_order_status'] ) ) {
    $vars['post_status'] = wc_clean( $_GET['_shop_order_status'] );
  }
  return $vars;
}

Deja un comentario

Share This