{"id":30840,"date":"2026-10-30T10:00:00","date_gmt":"2026-10-30T09:00:00","guid":{"rendered":"https:\/\/www.web-systems.pl\/?p=30840"},"modified":"2026-10-21T15:28:04","modified_gmt":"2026-10-21T14:28:04","slug":"woocommerce-product-configurator-plugin-or-custom-code","status":"publish","type":"post","link":"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/","title":{"rendered":"WooCommerce Product Configurator: Plugin or Custom Code"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Most stores can build a WooCommerce product configurator with a ready-made product fields plugin. It covers options, surcharges, a text field for personalization and conditions that hide choices that don&#8217;t fit. You only need custom code when the price comes from a formula, a choice affects production or stock, or the customer has to see the result live. Below you&#8217;ll find a step-by-step setup example and a list of signs that a plugin is no longer enough.<\/p>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of contents<\/p>\n<span class=\"ez-toc-title-toggle\"><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#Why_arent_WooCommerce_variations_enough_for_personalization\" >Why aren&#8217;t WooCommerce variations enough for personalization?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#What_can_a_ready-made_product_fields_plugin_do\" >What can a ready-made product fields plugin do?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#Step-by-step_setup_example_an_engraved_cutting_board\" >Step-by-step setup example: an engraved cutting board<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#When_does_a_WooCommerce_product_configurator_need_custom_code\" >When does a WooCommerce product configurator need custom code?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#How_do_you_avoid_losing_customers_in_the_configurator\" >How do you avoid losing customers in the configurator?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#Frequently_asked_questions\" >Frequently asked questions<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#Will_extra_fields_replace_product_variations\" >Will extra fields replace product variations?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#Can_an_option_surcharge_come_from_another_product\" >Can an option surcharge come from another product?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-product-configurator-plugin-or-custom-code\/#How_long_does_it_take_to_set_up_a_configurator_with_a_ready-made_plugin\" >How long does it take to set up a configurator with a ready-made plugin?<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_arent_WooCommerce_variations_enough_for_personalization\"><\/span>Why aren&#8217;t WooCommerce variations enough for personalization?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Variations work well for a product that physically exists in several versions, such as a T-shirt in three sizes. They handle add-ons and personalization less well, because every combination needs its own variation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">According to the <a href=\"https:\/\/woocommerce.com\/document\/variable-product\/\" rel=\"nofollow noopener\" target=\"_blank\">WooCommerce documentation on variable products<\/a>, variations are built from attributes, and each variation can have its own price, SKU and stock level. That&#8217;s great for inventory management. But an engraving with free text, an optional add-on, or a choice that only makes sense together with another choice quickly turns the variation list into a table nobody wants to maintain.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s why stores that sell personalized products usually combine two levels: variations for what&#8217;s on the shelf, and extra fields for what the customer adds to the order.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_can_a_ready-made_product_fields_plugin_do\"><\/span>What can a ready-made product fields plugin do?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A good product fields plugin gives the store a set of building blocks: checkboxes, dropdowns, text fields, surcharges and conditions between fields. With these you can build most configurators without a developer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One example is the Woo Product Fields Pro plugin. According to the vendor&#8217;s description, it works in layers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Parts<\/strong> are the smallest elements, with a color, label, image and database key; a part&#8217;s price can be fixed or taken from a selected product,<\/li>\n<li><strong>Fields<\/strong> are of type select, checkbox or text field, display as text, image or color, and can be marked as required,<\/li>\n<li>a field option can raise the price, lower it or leave it unchanged, can be selected by default and can link to a description,<\/li>\n<li><strong>Field Groups<\/strong> are assigned to specific products,<\/li>\n<li>logic conditions in a group let you validate fields or hide them depending on choices in other fields.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Step-by-step_setup_example_an_engraved_cutting_board\"><\/span>Step-by-step setup example: an engraved cutting board<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Take a workshop that sells wooden cutting boards with optional engraving and a care oil. The oil is also sold separately as a regular product.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Parts.<\/strong> You create an &#8220;Oil&#8221; part whose price comes from the existing oil product, and an &#8220;Engraving&#8221; part with a fixed price, because you don&#8217;t sell engraving on its own.<\/li>\n<li><strong>&#8220;Size&#8221; field.<\/strong> A required select with small, medium and large options, each with its own surcharge.<\/li>\n<li><strong>&#8220;Engraving&#8221; field.<\/strong> A checkbox with yes and no options; the yes option has the &#8220;Engraving&#8221; part assigned, so it adds that part&#8217;s price.<\/li>\n<li><strong>&#8220;Engraving text&#8221; field.<\/strong> A text field shown only when yes is selected in the &#8220;Engraving&#8221; field, and required in that case.<\/li>\n<li><strong>&#8220;Engraving font&#8221; field.<\/strong> A select displayed as images so the customer can see the typeface, also shown only with engraving.<\/li>\n<li><strong>&#8220;Oil included&#8221; field.<\/strong> A checkbox with the &#8220;Oil&#8221; part, unchecked by default.<\/li>\n<li><strong>Field Group.<\/strong> You combine all fields into a group and assign it to the cutting board products.<\/li>\n<li><strong>Test.<\/strong> You place several test orders with different combinations and check that the order in the admin panel shows the engraving text and the chosen font, because that&#8217;s what the person at the engraver will work from.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">The last step is often skipped, yet it&#8217;s the one that shows whether the configurator works for the business and not just for the customer. It&#8217;s also worth reading the article on <a href=\"https:\/\/www.web-systems.pl\/en\/product-page-online-store-what-to-include\/\">what a product page needs<\/a>, because the configurator is only one part of it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"When_does_a_WooCommerce_product_configurator_need_custom_code\"><\/span>When does a WooCommerce product configurator need custom code?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You need custom code when the configurator stops being a form with surcharges and starts calculating, drawing or driving processes in the company. Typical signs from projects we run as a software house:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Formula-based price.<\/strong> Blinds, countertops or prints priced from dimensions entered by the customer are a different problem from a fixed surcharge for an option. Such a calculator is designed together with rules for rounding, minimum sizes and discounts.<\/li>\n<li><strong>Live preview.<\/strong> A product visualization that changes with every choice, or a preview of the engraving text, is frontend work built for a specific product.<\/li>\n<li><strong>Production file.<\/strong> When an order has to produce a machine file or a job sheet in a set format, you need logic outside the store.<\/li>\n<li><strong>Parts inventory.<\/strong> If every add-on has its own stock level and must be blocked when it runs out, it has to be designed together with the warehouse and ERP.<\/li>\n<li><strong>Sales rules.<\/strong> Discounts based on combinations, prices for wholesale customers or order limits are often a job for a separate module.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Sometimes a mixed model makes sense: a ready-made plugin handles fields and conditions, and custom code adds the one missing piece, such as exporting orders to production. We build this kind of customization for <a href=\"https:\/\/www.web-systems.pl\/en\/woocommerce-stores\/\">stores built on WooCommerce<\/a>. If you&#8217;re wondering whether your store is ready for a bigger change, read about what people overlook when choosing <a href=\"https:\/\/www.web-systems.pl\/en\/custom-ecommerce-vs-woocommerce-hidden-costs\/\">custom-built e-commerce<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_do_you_avoid_losing_customers_in_the_configurator\"><\/span>How do you avoid losing customers in the configurator?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A WooCommerce product configurator should shorten the customer&#8217;s decision, not drag it out. Every extra field is another question the customer has to answer before adding to cart.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Show only the fields that make sense given the choices so far. That&#8217;s what hiding conditions are for.<\/li>\n<li>Set the most common choice as the default, so the customer can buy without clicking through everything.<\/li>\n<li>Show the price after every change, not only in the cart.<\/li>\n<li>Move option descriptions that need a longer explanation behind a link.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A confusing configurator is one of the common reasons people drop out before buying, as we describe in the article on <a href=\"https:\/\/www.web-systems.pl\/en\/abandoned-carts-online-store-causes-fixes\/\">why customers abandon carts<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Frequently_asked_questions\"><\/span>Frequently asked questions<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<div class=\"rank-math-list \">\n<div id=\"faq-question-1792592437924-0\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Will_extra_fields_replace_product_variations\"><\/span>Will extra fields replace product variations?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Not always. Keep variations for versions that have their own stock level, such as sizes. Extra fields work well for personalization and add-ons that don&#8217;t need separate inventory items.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1792592437924-1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"Can_an_option_surcharge_come_from_another_product\"><\/span>Can an option surcharge come from another product?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>In Woo Product Fields Pro, yes. According to the plugin description, a part&#8217;s price can be fixed or taken from a selected product, so an add-on that is also sold separately has one price across the whole store.<\/p>\n\n<\/div>\n<\/div>\n<div id=\"faq-question-1792592437924-2\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \"><span class=\"ez-toc-section\" id=\"How_long_does_it_take_to_set_up_a_configurator_with_a_ready-made_plugin\"><\/span>How long does it take to set up a configurator with a ready-made plugin?<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"rank-math-answer \">\n\n<p>It depends on the number of fields and conditions. A simple configurator like the cutting board example is set up in the admin panel without a developer, and most of the time usually goes into working out what data production needs and testing orders.<\/p>\n\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">If your WooCommerce product configurator comes down to options, surcharges, personalization text and conditions between fields, start with a ready-made plugin and only commission the missing pieces as code. The page of the <a href=\"https:\/\/k4.pl\/product\/woo-product-fields-pro\" rel=\"nofollow noopener\" target=\"_blank\">Woo Product Fields Pro plugin<\/a> describes the structure of parts, fields, groups and conditions and gives a setup example, so you can easily check before buying whether it covers your product.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Most stores can build a WooCommerce product configurator with a ready-made product fields plugin. It covers options, surcharges, a text field for personalization and conditions that hide choices that don&#8217;t fit. You only need custom code when the price comes from a formula, a choice affects production or stock, or the customer has to see [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":30827,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[812,838],"tags":[948,1126,1194,111,1190],"class_list":["post-30840","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-e-commerce-en","category-wordpress-en","tag-e-commerce-en","tag-online-store","tag-plugins","tag-ux-en","tag-woocommerce-en"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30840","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/comments?post=30840"}],"version-history":[{"count":2,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30840\/revisions"}],"predecessor-version":[{"id":30998,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/posts\/30840\/revisions\/30998"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media\/30827"}],"wp:attachment":[{"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/media?parent=30840"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/categories?post=30840"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.web-systems.pl\/en\/wp-json\/wp\/v2\/tags?post=30840"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}