Introdución
Estas selecciones luego se guardan como campos meta personalizados en la página de detalles del pedido de WooCommerce. Por ejemplo, en una tienda de muebles, puedes crear un campo personalizado llamado «estilo» para guardar valores personalizados como Moderno, Rústico o Clásico para cada pedido.
El siguiente fragmento de código agrega una columna personalizada llamada «Estilo» y un campo de filtro personalizado a la página de pedidos de WooCommerce, lo que permite a los propietarios de tiendas filtrar los pedidos en función de estos valores específicos. Los valores ingresados se guardan como metadatos y los administradores pueden filtrar los pedidos mediante un menú desplegable. ¡Veamos cómo se logra esto!
Solución
El siguiente fragmento de código también es compatible con la tabla de pedidos basada en HPOS.
```php
// Agregar la columna Estilo a la página de Pedidos en el administrador de WooCommerce
function ts_add_style_column( $columns ) {
$columns['estilo'] = __( 'Estilo', 'woocommerce' );
return $columns;
}
add_filter( 'manage_edit-shop_order_columns', 'ts_add_style_column' );
// Mostrar el valor de Estilo en la columna Estilo
function ts_display_style_column( $column, $post_id ) {
if ( $column == 'estilo' ) {
// Obtener el objeto de pedido de WooCommerce
$order = wc_get_order( $post_id );
// Reemplace 'style' con la clave meta real utilizada para el campo Estilo
$style_value = $order->get_meta( 'estilo' );
echo $style_value;
}
}
add_action( 'manage_shop_order_posts_custom_column', 'ts_display_style_column', 10, 2 );
// Agregar un menú desplegable personalizado para filtrar por estilo
function ts_add_style_filter( $post_type ) {
if ( 'shop_order' === $post_type ) {
$domain = 'woocommerce';
$styles = array( __( 'Moderno', $domain ), __( 'Rústico', $domain ), __( 'Clásico', $domain ) );
$selected_value = isset( $_GET['filter_style'] ) ? sanitize_title( $_GET['filter_style'] ) : '';
echo '';
}
}
add_action( 'restrict_manage_posts', 'ts_add_style_filter' );
// Filtrar pedidos por estilo
function ts_filter_orders_by_style( $vars ) {
if ( isset( $_GET['filter_style'] ) && ! empty( $_GET['filter_style'] ) ) {
$selected_style_value = sanitize_text_field( $_GET['filter_style'] );
$vars['meta_query'][] = array(
'key' => 'estilo',
'value' => $selected_style_value,
);
}
return $vars;
}
add_filter( 'request', 'ts_filter_orders_by_style' );
// Añadir estilo a los campos de búsqueda de la tabla Pedidos
function custom_woocommerce_shop_order_search_fields( $search_fields ) {
$search_fields[] = 'estilo';
return $search_fields;
}
add_filter( 'woocommerce_shop_order_search_fields', 'custom_woocommerce_shop_order_search_fields' );
```
Producción
Supongamos que has creado valores de metacampo personalizados como «Moderno», «Rústico» y «Clásico» para identificar el tipo de mueble asociado con cada pedido. Se agrega un campo de filtro personalizado llamado «Filtrar por estilo» y una nueva columna llamada «Estilo» a la página Pedidos de WooCommerce en el administrador de WordPress. Esta columna muestra los valores del campo meta personalizado, específicamente el campo «Estilo», para cada pedido.
Cuando se selecciona cualquiera de los valores como ‘Moderno’ en el campo de filtro, el código recuperará pedidos específicos para el valor seleccionado.
Si has integrado pasarelas de pago de terceros como PayPal o Stripe en tu tienda WooCommerce, también puedes agregar un campo de filtro para la pasarela de pago en la página de pedidos de WooCommerce, lo que te ayudará a ahorrar tiempo al filtrar rápidamente pedidos de transacciones de pago específicas.