WordPress Hosting

wooexperts header

Primero los productos destacados por defecto en la tienda con WooCommerce (actualizado)

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.

productos woocommerce destacados

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.

personalizar orden productos catalogo woocommerce

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 🙁

productos destacados sin preferencia en tienda

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.

productos destacados primero en tienda por defecto

Otra posibilidad es que, por defecto, y siempre, los productos destacados salgan los primeros en la tienda, algo que consigues con este sencillo código:

/* Productos destacados primeros por defecto */
add_filter( 'posts_orderby', 'ayudawp_productos_destacados_primero', 9999, 2 );
function ayudawp_productos_destacados_primero( $order_by, $query ) {
global $wpdb;
if ( ! is_admin() && $query->is_main_query() && is_woocommerce() ) {
$sticky_product_ids = wc_get_featured_product_ids();
$order_by = "FIELD(" . $wpdb->posts . ".ID,'" . implode( "','", $sticky_product_ids ) . "') DESC, " . $order_by;
}
return $order_by;
}

¡A vender!

Compartir en redes
Resumir con IA

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en las estrellas para valorarlo!

Promedio de puntuación 5 / 5. Total de votos: 5

¡Todavía no hay votos! Sé el primero en valorar este contenido.

Ya que has encontrado útil este contenido...

¡Sígueme en las redes sociales!

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!



Sobre el autor

3 comentarios en “Primero los productos destacados por defecto en la tienda con WooCommerce (actualizado)”

  1. Hola,

    ¿Crees que el código funcionaría también en una web multilingüe con el plugin Polylang PRO para Woocommerce?

    Gracias!

  2. Hola Fernando gracias por tus tutoriales, se podría hacer para que en vez de productos individuales fueran categorías es decir te creas la categoría navidad y esa es la que quieres que aparezcan los productos que hay en ella en primer lugar y así sucesivamente conforme las ordenes, saludos y muchas gracias.

Los comentarios están cerrados.

Scroll al inicio