{"id":1937,"date":"2023-04-03T11:25:39","date_gmt":"2023-04-03T17:25:39","guid":{"rendered":"http:\/\/racmanuel.dev\/?p=1937"},"modified":"2023-04-03T11:25:41","modified_gmt":"2023-04-03T17:25:41","slug":"como-establecer-precios-por-usuario-en-woocommerce-sin-plugins-y-con-codigo","status":"publish","type":"post","link":"https:\/\/racmanuel.dev\/en\/como-establecer-precios-por-usuario-en-woocommerce-sin-plugins-y-con-codigo\/","title":{"rendered":"How to set prices per user in WooCommerce without plugins and using code?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Bienvenidos, apasionados de WordPress y WooCommerce. Como programador web especializado en estas plataformas y amante de compartir conocimientos, hoy les traigo un tutorial sobre c\u00f3mo establecer precios por usuario en WooCommerce de manera program\u00e1tica. Esta gu\u00eda les ser\u00e1 \u00fatil si desean ofrecer precios personalizados a sus clientes en funci\u00f3n de sus roles de usuario o caracter\u00edsticas espec\u00edficas. \u00a1Comencemos!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1880\" height=\"1254\" src=\"http:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1.jpeg\" alt=\"woman coding on computer\" class=\"wp-image-1971\" title=\"\" srcset=\"https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1.jpeg 1880w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1-600x400.jpeg 600w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1-300x200.jpeg 300w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1-1024x683.jpeg 1024w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1-768x512.jpeg 768w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-3861958-1-1536x1025.jpeg 1536w\" sizes=\"(max-width: 1880px) 100vw, 1880px\" \/><figcaption class=\"wp-element-caption\">Photo by ThisIsEngineering on <a href=\"https:\/\/www.pexels.com\/photo\/woman-coding-on-computer-3861958\/\" rel=\"nofollow noopener\" target=\"_blank\">Pexels.com<\/a><\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-1-crear-un-plugin-personalizado\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 1: Crear un plugin personalizado<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para mantener nuestro c\u00f3digo limpio y organizado, vamos a crear un plugin personalizado. En el directorio <code>wp-content\/plugins<\/code> de su instalaci\u00f3n de WordPress, cree una nueva carpeta llamada <code>woocommerce-custom-prices<\/code>. Dentro de esta carpeta, cree un archivo PHP llamado <code>woocommerce-custom-prices.php<\/code> y agregue el siguiente c\u00f3digo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/**\n * Plugin Name: WooCommerce Custom Prices\n * Description: Establece precios personalizados por usuario en WooCommerce.\n * Author: [Su nombre]\n * Version: 1.0\n *\/\n\nif (!defined('ABSPATH')) {\n    exit; \/\/ Evitar el acceso directo a este archivo\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-2-crear-una-funcion-para-establecer-precios-personalizados\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 2: Crear una funci\u00f3n para establecer precios personalizados<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, agregue una funci\u00f3n en el archivo <code>woocommerce-custom-prices.php<\/code> que maneje la l\u00f3gica para establecer precios personalizados por usuario. En este ejemplo, vamos a ofrecer un descuento del 10% a los usuarios con el rol &#8220;suscriptor&#8221;.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function set_custom_prices($price, $product) {\n    \/\/ Obtener el usuario actual\n    $current_user = wp_get_current_user();\n\n    \/\/ Verificar si el usuario es un suscriptor\n    if (in_array('subscriber', $current_user-&gt;roles)) {\n        \/\/ Aplicar un descuento del 10%\n        $price = $price * 0.9;\n    }\n\n    return $price;\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-3-vincular-la-funcion-al-filtro-adecuado\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 3: Vincular la funci\u00f3n al filtro adecuado<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para aplicar nuestra funci\u00f3n a los precios de los productos en WooCommerce, utilizaremos el filtro <code>woocommerce_product_get_price<\/code>. Agregue el siguiente c\u00f3digo a continuaci\u00f3n de la funci\u00f3n <code>set_custom_prices<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">add_filter('woocommerce_product_get_price', 'set_custom_prices', 10, 2);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"codigo-completo\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">C\u00f3digo Completo<\/span><\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/**\n * Plugin Name: WooCommerce Custom Prices\n * Description: Establece precios personalizados por usuario en WooCommerce.\n * Author: Manuel Ramirez Coronel\n * Version: 1.0\n *\/\n\nif (!defined('ABSPATH')) {\n    exit; \/\/ Evitar el acceso directo a este archivo\n}\n\nfunction set_custom_prices($price, $product) {\n    \/\/ Obtener el usuario actual\n    $current_user = wp_get_current_user();\n\n    \/\/ Verificar si el usuario es un suscriptor\n    if (in_array('subscriber', $current_user-&gt;roles)) {\n        \/\/ Aplicar un descuento del 10%\n        $price = $price * 0.9;\n    }\n\n    return $price;\n}\nadd_filter('woocommerce_product_get_price', 'set_custom_prices', 10, 2);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-4-activar-el-plugin\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 4: Activar el plugin<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente, active el plugin desde la p\u00e1gina de administraci\u00f3n de plugins de su panel de WordPress. Ahora, los usuarios con el rol de &#8220;suscriptor&#8221; deber\u00edan recibir un 10% de descuento en todos los productos de su tienda WooCommerce.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este es solo un ejemplo simple de c\u00f3mo establecer precios personalizados por usuario en WooCommerce. Puede adaptar la funci\u00f3n <code>set_custom_prices<\/code> para ajustar los precios seg\u00fan diferentes roles de usuario o caracter\u00edsticas espec\u00edficas de sus clientes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"mejorando-la-funcionalidad-precios-personalizados-basados-en-metadatos-de-usuario\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Mejorando la funcionalidad: Precios personalizados basados en metadatos de usuario<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora que ya sabemos c\u00f3mo establecer precios personalizados por rol de usuario, vamos a mejorar nuestra funcionalidad para que sea m\u00e1s flexible. En lugar de basar el descuento en el rol del usuario, vamos a permitir que los administradores establezcan un descuento espec\u00edfico para cada usuario mediante un campo personalizado en su perfil.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-1-agregar-un-campo-personalizado-en-la-pagina-de-perfil-del-usuario\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 1: Agregar un campo personalizado en la p\u00e1gina de perfil del usuario<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para agregar un campo personalizado en la p\u00e1gina de perfil del usuario, utilizaremos la acci\u00f3n <code>show_user_profile<\/code> y <code>edit_user_profile<\/code>. Agregue el siguiente c\u00f3digo en el archivo <code>woocommerce-custom-prices.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function add_custom_user_discount_field($user) {\n    $discount = get_user_meta($user-&gt;ID, 'custom_user_discount', true);\n    ?&gt;\n    &lt;h3&gt;Descuento personalizado en WooCommerce&lt;\/h3&gt;\n    &lt;table class=\"form-table\"&gt;\n        &lt;tr&gt;\n            &lt;th&gt;&lt;label for=\"custom_user_discount\"&gt;Descuento (%)&lt;\/label&gt;&lt;\/th&gt;\n            &lt;td&gt;\n                &lt;input type=\"number\" name=\"custom_user_discount\" id=\"custom_user_discount\" value=\"&lt;?php echo esc_attr($discount); ?&gt;\" class=\"regular-text\" \/&gt;&lt;br \/&gt;\n                &lt;span class=\"description\"&gt;Ingrese el porcentaje de descuento para este usuario (0-100).&lt;\/span&gt;\n            &lt;\/td&gt;\n        &lt;\/tr&gt;\n    &lt;\/table&gt;\n    &lt;?php\n}\n\nadd_action('show_user_profile', 'add_custom_user_discount_field');\nadd_action('edit_user_profile', 'add_custom_user_discount_field');\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-2-guardar-el-valor-del-campo-personalizado\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 2: Guardar el valor del campo personalizado<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para guardar el valor del campo personalizado cuando se actualiza el perfil del usuario, utilizaremos la acci\u00f3n <code>personal_options_update<\/code> y <code>edit_user_profile_update<\/code>. Agregue el siguiente c\u00f3digo en el archivo <code>woocommerce-custom-prices.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function save_custom_user_discount_field($user_id) {\n    if (!current_user_can('edit_user', $user_id)) {\n        return false;\n    }\n\n    $discount = isset($_POST['custom_user_discount']) ? intval($_POST['custom_user_discount']) : 0;\n    update_user_meta($user_id, 'custom_user_discount', $discount);\n}\n\nadd_action('personal_options_update', 'save_custom_user_discount_field');\nadd_action('edit_user_profile_update', 'save_custom_user_discount_field');\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-3-modificar-la-funcion-de-precios-personalizados\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 3: Modificar la funci\u00f3n de precios personalizados<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vamos a modificar nuestra funci\u00f3n <code>set_custom_prices<\/code> para que aplique el descuento basado en el valor del campo personalizado en lugar del rol del usuario.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function set_custom_prices($price, $product) {\n    \/\/ Obtener el usuario actual\n    $current_user = wp_get_current_user();\n\n    \/\/ Obtener el descuento personalizado del usuario\n    $discount = get_user_meta($current_user-&gt;ID, 'custom_user_discount', true);\n\n    if (!empty($discount) &amp;&amp; is_numeric($discount) &amp;&amp; $discount &gt; 0) {\n        \/\/ Calcular el precio con descuento\n        $price = $price * (1 - $discount \/ 100);\n    }\n\n    return $price;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con estos cambios, ahora los administradores podr\u00e1n establecer un porcentaje de descuento espec\u00edfico para cada usuario desde la p\u00e1gina de perfil de usuario. El descuento se aplicar\u00e1 autom\u00e1ticamente a todos los productos de la tienda WooCommerce para ese usuario.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-4-mostrar-el-descuento-aplicado-en-la-pagina-del-producto-opcional\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Paso 4: Mostrar el descuento aplicado en la p\u00e1gina del producto (opcional)<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Para mejorar la experiencia del usuario, podemos mostrar el descuento aplicado en la p\u00e1gina del producto. Para ello, utilizaremos la acci\u00f3n <code>woocommerce_single_product_summary<\/code>. Agregue el siguiente c\u00f3digo en el archivo <code>woocommerce-custom-prices.php<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function display_user_discount() {\n    global $product;\n\n    \/\/ Obtener el usuario actual\n    $current_user = wp_get_current_user();\n\n    \/\/ Obtener el descuento personalizado del usuario\n    $discount = get_user_meta($current_user-&gt;ID, 'custom_user_discount', true);\n\n    if (!empty($discount) &amp;&amp; is_numeric($discount) &amp;&amp; $discount &gt; 0) {\n        echo '&lt;div class=\"woocommerce-user-discount\"&gt;';\n        echo '&lt;p&gt;&lt;strong&gt;Descuento aplicado:&lt;\/strong&gt; ' . $discount . '%&lt;\/p&gt;';\n        echo '&lt;\/div&gt;';\n    }\n}\n\nadd_action('woocommerce_single_product_summary', 'display_user_discount', 25);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Este c\u00f3digo muestra el porcentaje de descuento aplicado en la p\u00e1gina del producto para el usuario actual, justo despu\u00e9s del precio del producto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\"><span style=\"color: var(--theme-palette-color-8, #25ff00);\" class=\"stk-highlight\">Conclusi\u00f3n<\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con estos pasos, hemos creado una soluci\u00f3n m\u00e1s avanzada y flexible para establecer precios personalizados por usuario en WooCommerce. Ahora los administradores pueden aplicar descuentos espec\u00edficos a cada usuario, y los usuarios pueden ver sus descuentos aplicados en la p\u00e1gina del producto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Este tutorial solo es el comienzo de las posibilidades que ofrece la personalizaci\u00f3n de WooCommerce. Pueden seguir experimentando y adaptando estas funciones a las necesidades espec\u00edficas de su tienda en l\u00ednea.<\/p>\n\n\n<style><\/style><style><\/style>\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading has-large-font-size\" id=\"necesitas-ayuda-con-un-proyecto-web\">\u00bfNecesitas ayuda con un proyecto web?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si \u00bfNecesitas ayuda con alg\u00fan proyecto web? No dudes en contactarme desarrollo soluciones completas y personalizadas con WordPress y PHP, con herramientas y procesos modernos, utilizando HTML, CSS, SCSS, PHP, JavaScript, Bootstrap y m\u00e1s\u2026 Si \u00bfEst\u00e1s listo? \u00a1Env\u00edame un mensaje y hablemos de tu proyecto web!<\/p>\n\n\n<div class=\"wp-block-groundhogg-forms\">\n\t<div class=\"gh-form-wrapper\"><form method=\"post\" class=\"gh-form gh-form-v2\" target=\"_parent\" enctype=\"multipart\/form-data\" name=\"Formulario de Contacto\" id=\"gh-form-24\" data-id=\"24\"><div class=\"gh-form-fields\"><div class=\"gh-form-column col-1-of-2\"><label for=\"first_name\">Nombre <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"first_name\" id=\"first_name\" class=\"gh-input gh-first-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-2\"><label for=\"last_name\">Apellido(s) <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"last_name\" id=\"last_name\" class=\"gh-input gh-last-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"email\">Correo electr\u00f3nico <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"email\" name=\"email\" id=\"email\" class=\"gh-input gh-email\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"primary_phone\">Tel\u00e9fono o WhatsApp <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"tel\" name=\"primary_phone\" id=\"primary_phone\" class=\"gh-input\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"nombre_de_tu_negocio_o_empresa\">Nombre de tu Negocio o Empresa<\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"nombre_de_tu_negocio_o_empresa\" id=\"nombre_de_tu_negocio_o_empresa\" class=\"gh-input\" value=\"\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"link_de_tu_pagina_web\">Link de tu pagina web<\/label><div class=\"gh-form-input-field\"><input type=\"url\" name=\"link_de_tu_pagina_web\" id=\"link_de_tu_pagina_web\" class=\"gh-input\" value=\"\" placeholder=\"Si tu negocio o empresa tiene p\u00e1gina web ingresa aqu\u00ed el link.\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"question_type\">\u00bfQu\u00e9 tipo de pregunta tienes? <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><select name=\"question_type\" id=\"question_type\" class=\"gh-input\" required><option value=\"Cotizaci\u00f3n\">Cotizaci\u00f3n<\/option><option value=\"General\">General<\/option><option value=\"Soporte\">Soporte<\/option><\/select><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"message\">Pregunta <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><textarea name=\"message\" id=\"message\" class=\"gh-input\" rows=\"7\" placeholder=\"Tu pregunta o duda...\" type=\"text\" required><\/textarea><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><div class=\"consent gh-gdpr\" id=\"gdpr_consent\"><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"data_processing_consent\" id=\"data-processing-consent\" class=\"\" value=\"yes\" required\/><span class=\"checkbox-label\">I agree to racmanuel.dev&#8217;s storage and processing of my personal data. <span class=\"required\">*<\/span><\/span><\/label><\/div><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"marketing_consent\" id=\"marketing-consent\" class=\"\" value=\"yes\"\/><span class=\"checkbox-label\">I agree to receive marketing offers and updates from racmanuel.dev.<\/span><\/label><\/div><\/div><\/div><div class=\"gh-form-column col-1-of-3\"><button type=\"submit\" class=\"gh-submit gh-button primary\" value=\"\">\u00a1P\u00f3ngase en contacto!<\/button><\/div><\/div><\/form><\/div><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Have you ever wondered how you can set prices per user in WooCommerce? Well, this guide will be useful if you wish to offer customized prices to your customers based on their user roles or specific characteristics on your website.<\/p>","protected":false},"author":1,"featured_media":1970,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"categories":[48],"tags":[40],"niveles":[39],"class_list":["post-1937","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-woocommerce","niveles-avanzado"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1937","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/comments?post=1937"}],"version-history":[{"count":4,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1937\/revisions"}],"predecessor-version":[{"id":1972,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1937\/revisions\/1972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media\/1970"}],"wp:attachment":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media?parent=1937"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/categories?post=1937"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/tags?post=1937"},{"taxonomy":"niveles","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/niveles?post=1937"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}