Woocommerce – cómo ocultar productos en la Tienda y páginas de archivo de categorías

Guardar artículo

En esta guía, encontrarás shortcodes personalizados para ocultar productos en diferentes casos de uso.

Estos snippets se ejecutan en la tienda y las páginas de archivo. Ejemplo de urls:
– Página Tienda https://www.ejemplo.com/tienda
– Página de archivo de categorías https://www.ejemplo.com/categoria-producto/shirts

1. Ocultar productos por su categoría

PHP
// Ocultar productos por categorías
add_filter( 'woocommerce_product_query_tax_query', 'gurvic_hide_products_by_categories' );
function gurvic_hide_products_by_categories( $tax_query = array() ) {
  $hidden_categories = array( 'socks', 'shirts' );
  $tax_query[] = array(
    'taxonomy' => 'product_cat',
    'terms' => $hidden_categories,
    'field' => 'slug',
    'operator' => 'NOT IN',
  );
  // Retornar la consulta modificada
  return $tax_query;
}

2. Ocultar productos por su categoría y por rol de usuario

PHP
// Ocultar productos por categorías y rol de usuario
add_filter( 'woocommerce_product_query_tax_query', 'gurvic_hide_products_by_categories_and_user_role' );
function gurvic_hide_products_by_categories_and_user_role( $tax_query = array() ) {
  // Obtener el objeto 'usuario actual'
  $user = wp_get_current_user();
  // Arreglo de roles a bloquear
  $blocked_user_roles = array( 'subscriber', 'contributor' );
  // Arreglo de categorías a ocultar
  $hidden_categories = array( 'fashion' );
  if ( is_user_logged_in() && count( array_intersect( $blocked_user_roles, $user->roles ) ) === 0 ) {
    return $tax_query;
  }
  $tax_query[] = array(
    'taxonomy' => 'product_cat',
    'terms' => $hidden_categories,
    'field' => 'slug',
    'operator' => 'NOT IN',
  );
  // Retornar la consulta modificada
  return $tax_query;
}

3. Ocultar productos por meta campo

PHP
// Ocultar productos por meta campo
add_filter( 'woocommerce_product_query_meta_query', 'gurvic_hide_products_by_meta_key', 10, 2 );
function gurvic_hide_products_by_meta_key( $meta_query, $query ) {
	if ( !is_shop() && !is_product_category() ) {
		return $meta_query;
	}
	$meta_query[] = array(
		'key'     => 'meta_field',
		'value'   => 'meta_value',
		'compare' => '!=' // Otros valores disponibles:
		                  //  =
                      //  !=
                      //  >
                      //  >=
                      //  <
                      //  <=
                      //  LIKE
                      //  NOT LIKE
                      //  IN
                      //  NOT IN
                      //  BETWEEN
                      //  NOT BETWEEN
                      //  NOT EXISTS
	);
	return $meta_query;
}
PHP
// REVISAR
add_filter( 'woocommerce_product_categories_widget_dropdown_args', 'eda_exclude_wc_widget_categories' );
add_filter( 'woocommerce_product_categories_widget_args', 'eda_exclude_wc_widget_categories' );

function eda_exclude_wc_widget_categories( $cat_args ) {

    $args = array(
        'taxonomy'   => 'product_cat',
        'hide_empty' => 0
    );

    $all_categories        = get_categories( $args );
    $category_exclude_list = array();

    foreach ( $all_categories as $cat ) {
        if ( $cat->category_parent == 0 ) {
            $category_id = $cat->term_id;

            $product_args = array(
                'posts_per_page' => - 1,
                'post_type'      => 'product',
                'tax_query'      => array(
                    array(
                        'taxonomy' => 'product_cat',
                        'terms'    => $category_id,
                        'field'    => 'term_id',
                        'operator' => 'IN'
                    )
                ),
                'meta_query'     => array(
                    array(
                        'key'   => '_eda_display_in_b2b',
                        'value' => 'yes'
                    )
                )
            );

            $query = new WP_Query( $product_args );
            $count = $query->post_count;

            if ( $count == 0 ) {
                array_push( $category_exclude_list, $category_id );
            }
        }
    }

    $cat_args['exclude'] = $category_exclude_list;

    return $cat_args;
}

Ocultar categorías del listado general de categorías

PHP
add_filter( 'get_terms', 'get_subcategory_terms', 10, 3 );
function get_subcategory_terms( $terms, $taxonomies, $args ) {
	$new_terms 	= array();
	// Ids of the category you don't want to display on the shop page
	$hide_category 	= array( 19, 21 );
	// if a product category and on the shop page or in an archive product page
	if ( in_array( 'product_cat', $taxonomies ) && !is_admin() && is_shop() || in_array( 'product_cat', $taxonomies ) && !is_admin() && is_product_category() ) {
		foreach ( $terms as $key => $term ) {
			if ( ! in_array( $term->term_id, $hide_category ) ) { 
				$new_terms[] = $term;
			}
		}
	$terms = $new_terms;
	}
	return $terms;
}

Recursos Adicionales

¿Dónde agregar este snippet?

Principiante: agrega el código al archivo functions.php WP Escritorio > Apariencia > Editor de archivos de temas > functions.php de tu tema hijo.

Intermedio: agrega el código mediante un plug-in que permita agregar funciones personalizadas, como WPCode.

Avanzado: crea un plugin

Para más información mira esta artículo sobre cómo implementar código PHP personalizado en WordPress.

Recomendados:

ProveedorAlojamiento & Dominio
Anuncio - Hosting Web de SiteGround - Diseñado para una fácil administración web. Haz clic para saber más.
PluginConstructor Visual
Elementor
PluginOptimización de Velocidad
WP Rocket
PluginSEO
SEOPress WordPress SEO plugin
TemaWordPress & WooCommerce
WordPress Theme: Betheme
PluginSeguridad y Anti-malware
Malcare. WordPress Security
PluginWP Marketplace
Dokan

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *