Tenemos una opción para Mostrar solo productos mayoristas a clientes mayoristas. Sin embargo, esta función no ocultará las categorías minoristas que se muestran en tu tienda.
Afortunadamente, existe un fragmento personalizado que puedes usar para ocultar categorías minoristas no deseadas de tus usuarios mayoristas. Por favor, añade el siguiente fragmento al archivo function.php de tu tema hijo.
Ten en cuenta que la función de Mostrar solo productos mayoristas a clientes mayoristas debe estar habilitada para que el fragmento funcione; se encuentra en Woocommerce > Ajustes > Precios mayoristas > General.
add_filter('get_terms', function ($terms, $tax, $qvars, $term_query) {
if (is_shop() || is_product_category()) {
global $wc_wholesale_prices_premium;
if (!isset($wc_wholesale_prices_premium)) {
return $terms;
}
$user_wholesale_role = $wc_wholesale_prices_premium->wwpp_wholesale_roles->getUserWholesaleRole();
$wholesale_role = isset($user_wholesale_role[0]) ? $user_wholesale_role[0] : '';
foreach ($terms as $key => $term) {
// Ensure $term is an object before accessing its properties
if (!is_object($term) || !isset($term->term_id)) {
continue; // Skip this term if invalid
}
$product_ids = array();
$products = WWPP_WPDB_Helper::get_products_by_category($term->term_id) ?? array();
foreach ($products as $product) {
if (is_object($product) && isset($product->ID)) { // Added check for object validity
$product_ids[] = $product->ID;
}
}
if (!empty($wholesale_role)) {
$restricted_cat_ids = $wc_wholesale_prices_premium->wwpp_query->_get_restricted_product_cat_ids_for_wholesale_user($wholesale_role);
} else {
$restricted_cat_ids = get_option(WWPP_OPTION_PRODUCT_CAT_WHOLESALE_ROLE_FILTER, array());
}
$restricted_cat_ids = !empty($restricted_cat_ids) ? array_map('intval', $restricted_cat_ids) : array();
$args = array(
'post_type' => 'product',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'post__in' => $product_ids,
'meta_query' => array(
array(
'key' => WWPP_PRODUCT_WHOLESALE_VISIBILITY_FILTER,
'value' => array($wholesale_role, 'all'),
'compare' => 'IN'
)
),
'tax_query' => empty($restricted_cat_ids) ? array() : array(
array(
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $restricted_cat_ids,
'operator' => 'NOT IN'
)
)
);
if (!empty($user_wholesale_role) &&
get_option('wwpp_settings_only_show_wholesale_products_to_wholesale_users') === 'yes' &&
!WWPP_Helper_Functions::_wholesale_user_have_override_per_user_discount($user_wholesale_role) &&
!WWPP_Helper_Functions::_wholesale_user_have_general_role_discount($wholesale_role)) {
$args['meta_query'][] = array(
'relation' => 'OR',
array(
'key' => $wholesale_role . '_have_wholesale_price',
'value' => 'yes',
'compare' => '='
),
array(
'key' => $wholesale_role . '_wholesale_price',
'value' => 0,
'compare' => '>',
'type' => 'NUMERIC'
)
);
}
$wholesale_query = new WP_Query($args);
if (!$wholesale_query->have_posts()) {
unset($terms[$key]);
}
}
// Reset array keys after removing terms
$terms = array_values($terms);
}
return $terms;
}, 20, 4);
