Cómo Crear Variaciones de Productos en WooCommerce según el Rol del Usuario

add_filter( 'woocommerce_dropdown_variation_attribute_options_args', 'ocultar_terminos_variacion_impresion_para_distribuidores', 10, 1 );

function ocultar_terminos_variacion_impresion_para_distribuidores( $args ) {
    // Asegúrate de que este código solo se ejecuta para usuarios con el rol de 'distribuidor'
    if ( current_user_can( 'Distribuidor' ) ) {
        // Comprueba si estamos tratando con el atributo 'impresion'
        if ( isset( $args['attribute'] ) && 'pa_impresion' === $args['attribute'] ) {
            // Obtiene los términos disponibles para el atributo 'impresion'
            $terms = get_terms( 'pa_impresion', array('hide_empty' => false) );

            // Filtra los términos para excluir todos excepto 'sin impresion'
            $terms = array_filter( $terms, function( $term ) {
                return 'sin-impresion' === $term->slug; // Asegúrate de que el slug de 'sin impresion' sea correcto
            });

            // Reinicia las opciones del atributo para incluir solo 'sin impresion'
            $args['options'] = wp_list_pluck( $terms, 'slug' );
        }
    }

    return $args;
}
add_filter('woocommerce_dropdown_variation_attribute_options_args', 'filter_variations_based_on_user_role', 10);
function filter_variations_based_on_user_role($args) {
    $user = wp_get_current_user();

    // Verifica si el atributo se llama 'impresion'
    if ($args['attribute'] === 'pa_impresion') {
        // pregunta si el rol de usuario es 'distribuidor'
        if (in_array('Distribuidor', $user->roles)) {
            // Obtiene los terminos de atributo de 'impresion'
            $terms = get_terms('pa_impresion');

            // Filtra el termino 'sin impresion'
            $terms = array_filter($terms, function($term) {
                return $term->slug === 'sin-impresion';
            });

            // Muestra unicamente el termino 'sin impresion'
            $args['options'] = wp_list_pluck($terms, 'slug');
        } else {
            // Para otros usuarios elimina el termino 'sin impresion'
            $key = array_search('sin-impresion', $args['options']);
            if (false !== $key) {
                unset($args['options'][$key]);
            }
        }
    }

    return $args;
}