En la página de tienda que se crea con WooCommerce aparece por defecto un selector de orden, en el que el visitante puede elegir en qué orden visualizar los productos, en el que de manera predeterminada la clasificación es bastante aleatoria, o lo que se conoce como por orden en el menú, de lo que ya hablamos en otro artículo.
¿Y si, por ejemplo, queremos que se muestren primero nuestros productos destacados? Sí, esos que marcamos como destacados por algo al crearlos.
Porque da igual que los marquemos así, ni el cliente encontrará una opción en el desplegable para mostrarlos, pero lo que es más importante, por defecto no podemos elegir mostrar primero los productos destacados.
Y, en consecuencia, nuestros productos destacados quedarán, por ahí, huérfanos, sin nadie que les reconozca ese valor, ese mérito de ser destacados 🙁
Entonces ¿qué hago?, ¿no puedo mostrar en la tienda primero mis productos destacados?
¡Que síííííí!
Para conseguirlo, eso sí, tenemos que valernos de una función que haga la magia por nosotros, de manera automática, sin intervención del usuario, esta:
/* Ordenar productos en tienda por defecto primero por destacados */ // Reemplazamos el orden por defecto con uno personalizado add_filter( 'woocommerce_catalog_orderby', 'ayudawp_orden_catalogo_personalizado' ); function ayudawp_orden_catalogo_personalizado( $sortby ) { $sortby['featured'] = __( 'Orden por defecto', 'woocommerce' ); unset( $sortby['menu_order'] ); return $sortby; } // Hacemos que nuestro orden personalizado sea el por defecto add_filter( 'woocommerce_default_catalog_orderby', 'ayudawp_orden_catalogo_personalizado_pordefecto' ); function ayudawp_orden_catalogo_personalizado_pordefecto() { return 'featured'; } // Definimos el orden como opcion add_filter( 'woocommerce_get_catalog_ordering_args', 'ayudawp_opciones_orden_catalog_personalizado' ); function ayudawp_opciones_orden_catalog_personalizado( $args ) { $orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ); if ( 'featured' == $orderby_value ) { $args['orderby'] = 'menu_order title'; $args['order'] = ''; $args['meta_key'] = ''; } return $args; } // Ajustamos el orden para permitir destacados add_filter( 'posts_orderby', 'ayudawp_orden_catalogo_personalizado_destacados_primero', 10, 2 ); function ayudawp_orden_catalogo_personalizado_destacados_primero( $order_by, $query ) { global $wpdb; if ( ! is_admin() ) { $orderby_value = ( isset( $_GET['orderby'] ) ? wc_clean( (string) $_GET['orderby'] ) : apply_filters( 'woocommerce_default_catalog_orderby', get_option( 'woocommerce_default_catalog_orderby' ) ) ); $orderby_value_array = explode( '-', $orderby_value ); $orderby = esc_attr( $orderby_value_array[0] ); $order = ( ! empty( $orderby_value_array[1] ) ? $orderby_value_array[1] : 'ASC' ); $featured_product_ids = wc_get_featured_product_ids(); if ( $orderby == "featured" && is_array( $featured_product_ids ) && ! empty( $featured_product_ids ) ) { if ( empty( $order_by ) ) { $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $featured_product_ids ) . "') DESC "; } else { $order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $featured_product_ids ) . "') DESC, " . $order_by; } } } return $order_by; }
Solo tienes que copiar y pegar este código de arriba en el archivo functions.php
del tema activo – o como prefieras – y ya tendrás el orden por defecto del catálogo de tu tienda mostrando primero los productos destacados.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!