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.

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
- 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.
- 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.
- Genera campos de entrada de texto utilizando
woocommerce_wp_text_input()para cada rol de usuario.
- 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.
- Función
guardar_datos_precio_por_rol($product_id)- Almacena la información ingresada en los campos personalizados al actualizar un producto.
- 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.
- 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.
- Función
filtrar_precio_por_rol($price, $product)- Filtra el precio del producto en el frontend según el rol del usuario.
- Obtiene el rol del usuario actual.
- Recupera los precios almacenados para el producto actual.
- Itera sobre los roles del usuario actual y ajusta el precio si hay un precio específico para el rol.
- 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:
- Personalización de Estrategias de Precios:
- Adapta la estrategia de precios a diferentes segmentos de usuarios, optimizando la experiencia de compra.
- Ofertas y Descuentos Específicos:
- Facilita la creación de ofertas personalizadas y descuentos exclusivos para roles específicos.
- 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.




Deja tus opiniones o dudas en los comentarios.