{"id":2747,"date":"2023-10-16T10:55:37","date_gmt":"2023-10-16T15:55:37","guid":{"rendered":"http:\/\/racmanuel.dev\/?p=2747"},"modified":"2023-10-16T10:55:44","modified_gmt":"2023-10-16T15:55:44","slug":"como-crear-un-tipo-de-producto-personalizado-en-woocommerce","status":"publish","type":"post","link":"https:\/\/racmanuel.dev\/en\/como-crear-un-tipo-de-producto-personalizado-en-woocommerce\/","title":{"rendered":"How to Create a Custom Product Type in WooCommerce"},"content":{"rendered":"\n<figure class=\"wp-block-image aligncenter size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"http:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-1024x684.jpeg\" alt=\"a person using her laptop while holding a credit card\" class=\"wp-image-2751\" title=\"\" srcset=\"https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-1024x684.jpeg 1024w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-600x401.jpeg 600w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-300x200.jpeg 300w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-768x513.jpeg 768w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1-1536x1025.jpeg 1536w, https:\/\/racmanuel.dev\/wp-content\/uploads\/pexels-photo-7191163-1.jpeg 1880w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Photo by Pavel Danilyuk on <a href=\"https:\/\/www.pexels.com\/photo\/a-person-using-her-laptop-while-holding-a-credit-card-7191163\/\" rel=\"nofollow noopener\" target=\"_blank\">Pexels.com<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Con el crecimiento constante de las tiendas en l\u00ednea basadas en WooCommerce, la necesidad de tipos de productos personalizados ha aumentado. En este art\u00edculo, te mostrar\u00e9 c\u00f3mo desarrollar tu propio tipo de producto personalizado en WooCommerce para que puedas ofrecer funcionalidades adicionales y \u00fanicas a tus clientes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"por-que-necesitas-un-tipo-de-producto-personalizado\"><strong><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">\u00bfPor qu\u00e9 necesitas un tipo de producto personalizado?<\/span><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Los tipos de productos personalizados permiten a las tiendas en l\u00ednea ofrecer soluciones m\u00e1s adaptadas a sus productos y servicios espec\u00edficos. Por ejemplo, podr\u00edas querer crear un tipo de producto &#8220;Suscripci\u00f3n&#8221; que se maneje de manera diferente a los productos normales.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img decoding=\"async\" width=\"1024\" height=\"483\" src=\"http:\/\/racmanuel.dev\/wp-content\/uploads\/image-91-1024x483.png\" alt=\"\" class=\"wp-image-2749\" title=\"\" srcset=\"https:\/\/racmanuel.dev\/wp-content\/uploads\/image-91-1024x483.png 1024w, https:\/\/racmanuel.dev\/wp-content\/uploads\/image-91-600x283.png 600w, https:\/\/racmanuel.dev\/wp-content\/uploads\/image-91-300x142.png 300w, https:\/\/racmanuel.dev\/wp-content\/uploads\/image-91-768x362.png 768w, https:\/\/racmanuel.dev\/wp-content\/uploads\/image-91.png 1106w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pasos-para-crear-un-tipo-de-producto-personalizado-en-woocommerce\"><strong><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Pasos para Crear un Tipo de Producto Personalizado en WooCommerce:<\/span><\/strong><\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Registrar el Tipo de Producto:<\/strong> Explica c\u00f3mo utilizar el <code>add_action('init', 'register_my_subscription_product_type');<\/code> para registrar el nuevo tipo.<\/li>\n\n\n\n<li><strong>Agregar el Tipo de Producto al Selector:<\/strong> Muestra c\u00f3mo se puede agregar el tipo de producto al men\u00fa desplegable de tipos de producto utilizando el filtro <code>product_type_selector<\/code>.<\/li>\n\n\n\n<li><strong>Personalizar la Visibilidad de las Pesta\u00f1as en la Caja de Datos del Producto:<\/strong> Explica c\u00f3mo se puede mostrar u ocultar pesta\u00f1as espec\u00edficas seg\u00fan el tipo de producto seleccionado.<\/li>\n\n\n\n<li><strong>A\u00f1adir Datos Personalizados al Producto:<\/strong> Describe c\u00f3mo se pueden agregar campos personalizados al producto, como una casilla de verificaci\u00f3n para habilitar la suscripci\u00f3n o un campo de texto para agregar detalles de la suscripci\u00f3n.<\/li>\n\n\n\n<li><strong>Guardar y Mostrar Datos Personalizados:<\/strong> Explica c\u00f3mo guardar estos datos personalizados y c\u00f3mo mostrarlos en la p\u00e1gina del producto.<\/li>\n\n\n\n<li><strong>Mostrar el Bot\u00f3n &#8220;A\u00f1adir al Carrito&#8221;:<\/strong> Detalla c\u00f3mo mostrar el bot\u00f3n &#8220;A\u00f1adir al carrito&#8221; para el tipo de producto personalizado.<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\r\n\/**\r\n * Plugin Name: Custom Product Type\r\n * Plugin URI:\r\n * Description:\r\n * Version:\r\n * Author:\r\n * Author URI:\r\n * License:\r\n * License URI:\r\n *\/\r\n\r\n\/**\r\n * Register a custom product type on initialization.\r\n *\/\r\nadd_action('init', 'register_my_subscription_product_type');\r\n\r\n\/**\r\n * Class WC_Product_my_subscription\r\n * \r\n * Define a custom product type.\r\n *\/\r\nfunction register_my_subscription_product_type()\r\n{\r\n    class WC_Product_my_subscription extends WC_Product\r\n    {\r\n        \/**\r\n         * WC_Product_my_subscription constructor.\r\n         *\r\n         * @param mixed $product\r\n         *\/\r\n        public function __construct($product)\r\n        {\r\n            $this->product_type = 'my_subscription';\r\n            parent::__construct($product);\r\n        }\r\n    }\r\n}\r\n\r\n\/**\r\n * Add the custom product type to product type selector.\r\n *\r\n * @param array $types Existing product types.\r\n * @return array Modified product types.\r\n *\/\r\nfunction add_my_subscription_product_type($types)\r\n{\r\n    $types['my_subscription'] = __('My Subscription');\r\n    return $types;\r\n}\r\nadd_filter('product_type_selector', 'add_my_subscription_product_type');\r\n\r\n\/**\r\n * Customize visibility of tabs in product data metabox.\r\n *\r\n * @param array $tabs Existing product data tabs.\r\n * @return array Modified product data tabs.\r\n *\/\r\nfunction wcs_hide_attributes_data_panel($tabs)\r\n{\r\n    $tabs['general']['class'][] = 'show_if_my_subscription';\r\n    $tabs['attribute']['class'][] = 'hide_if_my_subscription';\r\n    $tabs['shipping']['class'][] = 'hide_if_my_subscription';\r\n    $tabs['inventory']['class'][] = 'show_if_my_subscription';\r\n    return $tabs;\r\n}\r\n\r\n\/**\r\n * Display pricing fields for the custom product type.\r\n *\/\r\nfunction my_subscription_custom_js()\r\n{\r\n    if ('product' != get_post_type()) :\r\n        return;\r\n    endif;\r\n    ?>\r\n    &lt;script type='text\/javascript'>\r\n        jQuery(document).ready(function() {\r\n            jQuery('.options_group.pricing').addClass('show_if_my_subscription').show();\r\n            jQuery('.general_options').show();\r\n        });\r\n    &lt;\/script>\r\n&lt;?php\r\n}\r\nadd_action('admin_footer', 'my_subscription_custom_js');\r\n\r\n\/**\r\n * Add custom product data tab.\r\n *\r\n * @param array $tabs Existing product data tabs.\r\n * @return array Modified product data tabs.\r\n *\/\r\nfunction my_subscription_product_tab($tabs)\r\n{\r\n    $tabs['my_subscription'] = array(\r\n        'label' => __('My Subscription Tab', 'dm_product'),\r\n        'target' => 'my_subscription_product_options',\r\n        'class' => 'show_if_my_subscription_product',\r\n    );\r\n    return $tabs;\r\n}\r\nadd_filter('woocommerce_product_data_tabs', 'my_subscription_product_tab');\r\n\r\n\/**\r\n * Content for custom product data tab.\r\n *\/\r\nfunction QL_custom_product_options_product_tab_content()\r\n{\r\n    ?>&lt;div id='my_subscription_product_options' class='panel woocommerce_options_panel'>\r\n        &lt;div class='options_group'>&lt;?php\r\n                woocommerce_wp_checkbox(array(\r\n                    'id' => '_enable_custom_product',\r\n                    'label' => __('Enable Subscription'),\r\n                ));\r\n\r\n                woocommerce_wp_text_input(\r\n                    array(\r\n                        'id' => 'my_subscription_product_info',\r\n                        'label' => __('Enter Subscription Details', 'dm_product'),\r\n                        'placeholder' => '',\r\n                        'desc_tip' => 'true',\r\n                        'description' => __('Enter subscription details.', 'dm_product'),\r\n                        'type' => 'text',\r\n                    )\r\n                );\r\n\r\n                ?>\r\n        &lt;\/div>\r\n    &lt;\/div>\r\n&lt;?php\r\n}\r\nadd_action('woocommerce_product_data_panels', 'QL_custom_product_options_product_tab_content');\r\n\r\n\/**\r\n * Save custom product data.\r\n *\r\n * @param int $post_id Product ID.\r\n *\/\r\nfunction save_my_subscription_product_settings($post_id)\r\n{\r\n    $engrave_text_option = isset($_POST['_enable_custom_product']) ? 'yes' : 'no';\r\n    update_post_meta($post_id, '_enable_custom_product', esc_attr($engrave_text_option));\r\n\r\n    if (!empty($_POST['my_subscription_product_info'])) {\r\n        update_post_meta($post_id, 'my_subscription_product_info', esc_attr($_POST['my_subscription_product_info']));\r\n    }\r\n}\r\nadd_action('woocommerce_process_product_meta', 'save_my_subscription_product_settings');\r\n\r\n\/**\r\n * Display custom product data in frontend.\r\n *\/\r\nfunction my_subscription_product_front()\r\n{\r\n    global $product;\r\n    if ('my_subscription' == $product->get_type()) {\r\n        echo \"&lt;strong>Subscription Type: &lt;\/strong>\" . esc_html(get_post_meta($product->get_id(), 'my_subscription_product_info', true));\r\n    }\r\n}\r\nadd_action('woocommerce_single_product_summary', 'my_subscription_product_front');\r\n\r\n\/**\r\n * Display add to cart button for the custom product type.\r\n *\/\r\nadd_action(\"woocommerce_my_subscription_add_to_cart\", function () {\r\n    do_action('woocommerce_simple_add_to_cart');\r\n});\r<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"conclusion\"><strong><span style=\"color: var(--theme-palette-color-2, #25ff00);\" class=\"stk-highlight\">Conclusi\u00f3n<\/span><\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Con la habilidad de crear tipos de productos personalizados en WooCommerce, las posibilidades son pr\u00e1cticamente ilimitadas. Puedes adaptar tu tienda en l\u00ednea para que se ajuste perfectamente a las necesidades de tus clientes y productos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00bfEst\u00e1s listo para llevar tu tienda WooCommerce al siguiente nivel? Comienza a implementar tipos de productos personalizados hoy mismo. Si necesitas ayuda adicional o un desarrollo personalizado, no dudes en ponerte en contacto con nosotros.<\/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>Descubre c\u00f3mo desarrollar un tipo de producto personalizado en WooCommerce con este tutorial detallado. Implementa funciones avanzadas para tus tiendas en l\u00ednea.<\/p>","protected":false},"author":1,"featured_media":2751,"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,42],"niveles":[39],"class_list":["post-2747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-woocommerce","tag-wordpress","niveles-avanzado"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2747","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=2747"}],"version-history":[{"count":4,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2747\/revisions"}],"predecessor-version":[{"id":2753,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/2747\/revisions\/2753"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media\/2751"}],"wp:attachment":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media?parent=2747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/categories?post=2747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/tags?post=2747"},{"taxonomy":"niveles","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/niveles?post=2747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}