Skip to main content

Cómo ordenar y mostrar productos usando metadatos o campos personalizados

Los metadatos se utilizan para configurar filtros de clasificación que pueden utilizar tanto números como texto. Para ser claro con los filtros personalizados, les mostraré dos opciones de clasificación: Ordenar por ubicación y Ordenar por puntos de venta, es decir un valor numérico y otro de texto..

Es la mejor práctica crear un tema secundario y agregar los siguientes códigos en el archivo functions.php de tu tema secundario para permanecer fuera de riesgos al actualizar tu tema.

función cw_add_postmeta_ordering_args ($args_sort_cw) {
 
 $cw_orderby_value = isset( $_GET['orderby'] ) ? wc_clean( $_GET['ordenar'] ) :
       apply_filters ('woocommerce_default_catalog_orderby', get_option ('woocommerce_default_catalog_orderby'));
 interruptor ($ cw_orderby_value) {
   caso 'puntos_otorgados':
     $args_sort_cw['orderby'] = 'meta_value_num';
     $args_sort_cw['orden'] = 'desc';
     $args_sort_cw['meta_key'] = 'puntos';
     descanso;
      caso 'ubicación':
           $args_sort_cw['orderby'] = 'meta_value';
           $args_sort_cw['orden'] = 'asc';
           $args_sort_cw['meta_key'] = 'ubicación';
           descanso;
 
 }
 
 devuelve $args_sort_cw;
}
add_filter('woocommerce_get_catalog_ordering_args', 'cw_add_postmeta_ordering_args');
función cw_add_new_postmeta_orderby ($ sortby) {
  $sortby['ubicación'] = __( 'Ordenar por ubicación', 'woocommerce' );
  $sortby['points_awarded'] = __( 'Ordenar por punto de venta', 'woocommerce' );
  return $ordenar;
}
add_filter('woocommerce_default_catalog_orderby_options', 'cw_add_new_postmeta_orderby');
add_filter('woocommerce_catalog_orderby', 'cw_add_new_postmeta_orderby');

Después de agregar el código anterior, los filtros de clasificación aparecerán en el menú desplegable de las páginas de sus productos.

El siguiente fragmento de código te mostrará la ubicación y los puntos de venta en la página de la tienda. Del mismo modo, puedes mostrar cualquier campo personalizado en la página de la tienda utilizando la misma función.

función cw_shop_display() {
 
 $producto global;
   $ubicación = get_post_meta( $producto->id, 'ubicación', true);
   $punto_de_venta = get_post_meta( $producto->id, 'puntos', verdadero);
 
  if ( ! vacío( $ubicación ) ) {
       echo '<div class="product-meta-label"><span class="product-meta-label">Ubicación:</span> ' . $ ubicación . '</div>';
   }
  if ( ! vacío( $punto_de_venta ) ) {
           echo '<div class="product-meta"><span class="product-meta-label">Puntos de venta:</span> ' . $punto_de_venta . '</div>';
   }
 if ( $producto->get_sku() ) {
   echo '<div class="product-meta">SKU: ' . $producto->get_sku() . '</div>';
 }
}
add_action('woocommerce_after_shop_loop_item', 'cw_shop_display', 9);

Siempre que un visitante seleccione una opción de clasificación, los valores correspondientes se cambiarán.

Ayúdanos y síguenos en redes sociales con un click

DEJA UN COMENTARIO