✅Diferente Precio según el Rol en Woocommerce (Sin Plugins)

Este código PHP se destaca por su capacidad para personalizar la gestión de precios en WooCommerce, permitiendo la asignación de precios específicos según el rol del usuario. La función principal, agregar_campos_precio_por_rol(), facilita a los administradores la definición de precios para diferentes roles en la interfaz de edición de productos.

Revisa este otro tutorial Premium donde adaptamos el código para que funcione también con productos variables. Click aquí.

Funcionalidades Clave:

La función crea dinámicamente campos de entrada de texto para cada rol de usuario, facilitando la asignación de precios específicos a cada uno.

La función guardar_datos_precio_por_rol($product_id) recolecta y sanitiza los datos ingresados, garantizando un almacenamiento seguro en los metadatos del producto.

La función filtrar_precio_por_rol($price, $product) ajusta dinámicamente el precio que se muestra en el frontend, considerando el rol del usuario actual y los precios almacenados.

Acciones y Filtros Hooks:

add_action('woocommerce_product_options_pricing', 'agregar_campos_precio_por_rol') integra la función en la interfaz de administración de productos de WooCommerce, facilitando la asignación de precios por roles.

add_action('woocommerce_process_product_meta', 'guardar_datos_precio_por_rol') asegura la actualización adecuada de los datos al guardar un producto.

add_filter('woocommerce_product_get_price', 'filtrar_precio_por_rol', 10, 2) y otros hooks similares permiten el filtrado dinámico de precios en el frontend.

En resumen, este código simplifica la gestión de precios en WooCommerce y resalta la versatilidad y personalización que la plataforma ofrece a través de una implementación ingeniosa y centrada en el usuario.

cantidad predeterminada woocommerce

El siguiente código tienes que agregarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.

// Agregar campos de precio por rol en la página de edición de productos
function agregar_campos_precio_por_rol() {
    global $post;
    // Obtener precios almacenados
    $precios_por_rol = get_post_meta($post->ID, '_precios_por_rol', true);
    // Obtener roles de usuario
    global $wp_roles;
    $user_roles = $wp_roles->roles;
    // Salida de los campos
    echo '<div class="options_group">';
    foreach ($user_roles as $role_slug => $role_info) {
        $role_name = $role_info['name'];
        $precio = isset($precios_por_rol[$role_slug]) ? $precios_por_rol[$role_slug] : '';
        woocommerce_wp_text_input(
            array(
                'id'          => '_precio_' . esc_attr($role_slug),
                'label'       => sprintf(__('Precio para %s (€)', 'woocommerce'), $role_name),
                'placeholder' => '',
                'desc_tip'    => 'true',
                'value'       => $precio,
                'custom_attributes' => array('step' => 'any'),
            )
        );
    }
    echo '</div>';
}
add_action('woocommerce_product_options_pricing', 'agregar_campos_precio_por_rol');
// Guardar datos de campos de precio al guardar el producto
function guardar_datos_precio_por_rol($product_id) {
    $precios_por_rol = array();
    // Obtener roles de usuario
    global $wp_roles;
    $user_roles = $wp_roles->roles;
    foreach ($user_roles as $role_slug => $role_info) {
        $campo_precio = '_precio_' . esc_attr($role_slug);
        $precio = isset($_POST[$campo_precio]) ? sanitize_text_field($_POST[$campo_precio]) : '';
        $precios_por_rol[$role_slug] = $precio;
    }
    update_post_meta($product_id, '_precios_por_rol', $precios_por_rol);
}
add_action('woocommerce_process_product_meta', 'guardar_datos_precio_por_rol');
// Filtrar precio en el frontend según el rol del usuario
function filtrar_precio_por_rol($price, $product) {
    // Obtener el rol del usuario actual
    $current_user = wp_get_current_user();
    $user_roles = $current_user->roles;
    // Obtener precios almacenados
    $precios_por_rol = get_post_meta($product->get_id(), '_precios_por_rol', true);
    // Verificar si hay un precio específico para el rol actual
    foreach ($user_roles as $role_slug) {
        if (isset($precios_por_rol[$role_slug]) && !empty($precios_por_rol[$role_slug])) {
            $price = $precios_por_rol[$role_slug];
            break;
        }
    }
    return $price;
}
add_filter('woocommerce_product_get_price', 'filtrar_precio_por_rol', 10, 2);
add_filter('woocommerce_product_get_regular_price', 'filtrar_precio_por_rol', 10, 2);
add_filter('woocommerce_product_get_sale_price', 'filtrar_precio_por_rol', 10, 2);
Lenguaje del código: PHP (php)

Entendiendo el Código

  1. Función agregar_campos_precio_por_rol()
    • Genera campos de entrada de texto en la página de edición de productos para establecer precios específicos por rol.
    Obtención de Precios y Roles:
    • Obtiene los precios almacenados para cada rol de usuario asociado al producto.
    • Recupera la información sobre los roles de usuario disponibles en el sistema.
    Salida de Campos:
    • Genera campos de entrada de texto utilizando woocommerce_wp_text_input() para cada rol de usuario.
    Acción Hook:
    • Utiliza add_action('woocommerce_product_options_pricing', 'agregar_campos_precio_por_rol') para integrar estos campos en la interfaz de administración de productos de WooCommerce.
  2. Función guardar_datos_precio_por_rol($product_id)
    • Almacena la información ingresada en los campos personalizados al actualizar un producto.
    Guardado de Datos:
    • Crea un array para almacenar los precios por rol.
    • Itera sobre los roles de usuario y obtiene los precios ingresados en los campos correspondientes.
    • Utiliza update_post_meta() para actualizar los metadatos del producto con la información recopilada.
    Acción Hook:
    • Utiliza add_action('woocommerce_process_product_meta', 'guardar_datos_precio_por_rol') para asociar la función al proceso de actualización de productos en WooCommerce.
  3. Función filtrar_precio_por_rol($price, $product)
    • Filtra el precio del producto en el frontend según el rol del usuario.
    Obtención de Roles y Precios Almacenados:
    • Obtiene el rol del usuario actual.
    • Recupera los precios almacenados para el producto actual.
    Filtrado del Precio:
    • Itera sobre los roles del usuario actual y ajusta el precio si hay un precio específico para el rol.
    Filtros Hooks:
    • Utiliza add_filter() para aplicar la función de filtrado a diferentes tipos de precios (woocommerce_product_get_price, woocommerce_product_get_regular_price, woocommerce_product_get_sale_price).

Usos Potenciales:

  1. Personalización de Estrategias de Precios:
    • Adapta la estrategia de precios a diferentes segmentos de usuarios, optimizando la experiencia de compra.
  2. Ofertas y Descuentos Específicos:
    • Facilita la creación de ofertas personalizadas y descuentos exclusivos para roles específicos.
  3. Gestión Eficiente de Roles:
    • Simplifica la administración de precios al vincularlos directamente a roles de usuario predefinidos.

En resumen, el código presentado para la gestión de precios por rol en WooCommerce ofrece una herramienta versátil y eficaz para adaptar la estrategia de precios según la diversidad de roles de usuarios. La capacidad de asignar precios específicos a cada rol, integrada de manera intuitiva en la interfaz de edición de productos, proporciona una flexibilidad esencial para administradores de tiendas en línea.

Nos vemos en el siguiente tutorial. Un saludo.

5/5 - (4 votos)
Compartir Artículo

Un comentario

  1. Fran Salas Master WP 1 año atrás

    Deja tus opiniones o dudas en los comentarios.

¿Tienes una duda o sugerencia sobre este artículo?

Puedes dejar un comentario de forma anónima, sin necesidad de registrarte ni proporcionar ningún dato personal. Tu mensaje se publicará como “Usuario Anónimo No Premium”, un perfil que agrupa a todos los visitantes no registrados.

Importante: para evitar el spam automático, todos los comentarios anónimos deben comenzar con el símbolo #. Ejemplo: # Tengo una duda sobre los shortcodes personalizados...

Este espacio está destinado exclusivamente a preguntas concretas, dudas o sugerencias relacionadas con el contenido del artículo. Por respeto a los demás lectores, no se publicarán temas sin relación.

Privacidad y normas:
  • No tienes que agregar tu nombre, correo ni ningún otro dato identificativo.
  • No se permiten enlaces en comentarios anónimos.
  • No se permiten símbolos especiales como < o > (menor y mayor que), ya que se consideran intentos de insertar código y serán bloqueados.
  • Todos los comentarios anónimos pasan por revisión antes de ser publicados y solo se aprobarán si aportan valor al contenido del artículo.
¿Quieres comentar con tu nombre y que tu mensaje se publique al instante? Inicia sesión o regístrate.

Deja un comentario

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

0%