El Loop Grid de elementor es uno de mis widgets favoritos, nos permite crear cuadrículas donde mostrar los productos de la tienda y hacer un diseño realmente a medida.
Por supuesto, también tenemos que hacer el item de producto, es decir una plantilla que mostrará el aspecto de cada uno de los productos que aparecen listados en la tienda.
Aunque disponemos de un widget en elementor Pro (el filtro de taxonomía) para filtrar por categoría, marca u otras taxonomías, elementor Pro no dispone de un elemento para la ordenación de productos.
Me refiero al típico desplegable que nos permite ordenar los productos por precio, orden alfabético, populares, novedades…
Asi que vamos a crear un desplegable Ajax (no recarga la página) para hacer esta función, sin plugins ni complicaciones.
Como es lógico, debes tener creada tu página de la tienda con el maquetador de temas de elementor, y haber creado la cuadrícula en bucle (el Loop Grid) con su correspondiente plantilla de Loop item.
El fragmento de código
Para conseguir esta función, sólo has de añadir un fragmento de código, lo mejor es que lo hagas usando el famosísimo plugin Code Snippets del que te hablo aquí.
Si ya lo tienes instalado, te vas a Fragmentos de código / Añadir nuevo, le das un nombre como Desplegable para ordenar productos y pegas lo siguiente:
/**
* OPCIONES DE ORDENACIÓN
*/
function ayra_opciones_orden_productos() {
return array(
'date' => 'Últimos productos',
'title-asc' => 'Orden alfabético: A–Z',
'title-desc' => 'Orden alfabético: Z–A',
'price' => 'Precio: menor a mayor',
'price-desc' => 'Precio: mayor a menor',
'popularity' => 'Más populares',
'rating' => 'Mejor valorados',
);
}
/**
* OBTENER EL ORDEN SELECCIONADO
*/
function ayra_obtener_orden_productos() {
$opciones = ayra_opciones_orden_productos();
if ( isset( $_GET['orderby'] ) ) {
$orden = sanitize_key( wp_unslash( $_GET['orderby'] ) );
} elseif ( isset( $_COOKIE['ayra_product_order'] ) ) {
$orden = sanitize_key(
wp_unslash( $_COOKIE['ayra_product_order'] )
);
} else {
$orden = 'date';
}
return isset( $opciones[ $orden ] ) ? $orden : 'date';
}
/**
* SHORTCODE DEL DESPLEGABLE
*
* Uso: [ayra_ordenar_productos]
*/
add_shortcode(
'ayra_ordenar_productos',
'ayra_selector_orden_productos'
);
function ayra_selector_orden_productos() {
if ( ! function_exists( 'wc_query_string_form_fields' ) ) {
return '';
}
$opciones = ayra_opciones_orden_productos();
$orden_actual = ayra_obtener_orden_productos();
$select_id = wp_unique_id( 'ayra-orderby-' );
ob_start();
?>
get_name()
) {
return $query_args;
}
$css_id = $widget->get_settings_for_display( '_element_id' );
if ( 'ayra-productos-grid' !== $css_id ) {
return $query_args;
}
$orden = ayra_obtener_orden_productos();
switch ( $orden ) {
case 'title-asc':
$query_args['orderby'] = 'title';
$query_args['order'] = 'ASC';
break;
case 'title-desc':
$query_args['orderby'] = 'title';
$query_args['order'] = 'DESC';
break;
case 'price':
$query_args['meta_key'] = '_price';
$query_args['orderby'] = 'meta_value_num';
$query_args['order'] = 'ASC';
break;
case 'price-desc':
$query_args['meta_key'] = '_price';
$query_args['orderby'] = 'meta_value_num';
$query_args['order'] = 'DESC';
break;
case 'popularity':
$query_args['meta_key'] = 'total_sales';
$query_args['orderby'] = 'meta_value_num';
$query_args['order'] = 'DESC';
break;
case 'rating':
$query_args['meta_key'] = '_wc_average_rating';
$query_args['orderby'] = 'meta_value_num';
$query_args['order'] = 'DESC';
break;
case 'date':
default:
$query_args['orderby'] = 'date';
$query_args['order'] = 'DESC';
break;
}
return $query_args;
}
Hacer que reconozca el Loop Grid
Para que el snippet pueda identificar que Loop Grid es el que debe ordenar, has de seleccionar tu Loop Grid, ir a Avanzado y en ID de CSS escribir la clase ayra-productos-grid
Mostrar el desplegable de ordenación
Simplemente arrastra donde quieras (normalmente sobre los productos) un widget de Shortcode y escribe [ayra_ordenar_productos]
No hace falta darle CSS, con el propio elementor puedes alinearlo a la derecha o a la izquierda y darle un ancho personalizado, por ejemplo 220px
Con estos sencillos pasos ya tienes hecha la ordenación de productos para loop Grid.
Ordenación de productos para Loop Grid
Ya no tienes excusa para que tu tienda online Woocommerce tenga todas las funciones necesarias diseñando a medida con elementor Pro.