Ocultar productos sin categoría de la página de tienda
Cuando WooCommerce se actualizó a la versión 3.3, se agregó la categoría de producto 'Sin categoría' y luego apareció en todas las páginas (incluida la página de la tienda WooCommerce) donde se mostraban productos. Todos los productos que no tienen al menos una categoría asignada se asignan entonces (lógicamente) a la categoría 'Sin categoría'.
Siempre usé el enfoque (posiblemente no ideal) de ocultar productos de temporada eliminando todas las categorías de estos productos cuando estaban fuera de temporada. Este nuevo cambio significó que estos productos 'ocultos' aparecieran de repente en el sitio para la venta en esta nueva categoría, lo cual no quiero en ninguna página.
He buscado en la web una forma de ocultar la categoría de producto 'Sin categoría' y descubrí que este problema está muy extendido. Se propusieron varias soluciones, incluyendo hacer que la categoría "Sin categoría" sea una subcategoría y luego ocultar todas las subcategorías u ocultar categorías usando CSS.
Ver https://wordpress.org/support/topic/uncategorized-product-category-still-showing-after-3-3-1/
Sin embargo, ninguna de estas soluciones es lo suficientemente 'limpia' o robusta.
Mi solución alternativa ha sido mostrar solo los productos que quiero que sean visibles usando el shortcode de categorías de productos (sin el ID de la categoría sin categorizar). Por ejemplo:
[product_categories ids="11, 19, 18, 14, 7, 8, 9, 10, 15, 98, 16, 17"]
pero esto no resuelve el problema en la página de la tienda (que no usa shortcodes).
Me pregunto si alguien tiene un método robusto para ocultar la categoría de producto 'Sin categoría', ya que es un problema que es actual y parece estar muy extendido en este momento.

Resolví este problema basándome en el código amablemente proporcionado por rynoldos (https://gist.github.com/rynaldos/a9d357b1e3791afd9bea48833ff95994) de la siguiente manera:
Incluye el siguiente código en tu archivo functions.php:
/** Eliminar categorías de la tienda y otras páginas
* en Woocommerce
*/
function wc_hide_selected_terms( $terms, $taxonomies, $args ) {
$new_terms = array();
if ( in_array( 'product_cat', $taxonomies ) && !is_admin() && is_shop() ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->slug, array( 'uncategorized' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
add_filter( 'get_terms', 'wc_hide_selected_terms', 10, 3 );
Este código se aplica a la página de tienda en WooCommerce. Si deseas aplicarlo a una página diferente, reemplaza is_shop() con is_page('TU_SLUG_DE_PAGINA').
Yo también tuve que buscar bastante para encontrar una solución a este problema, pero el código anterior funciona bien para mí.
