{"id":150,"date":"2026-10-29T09:00:00","date_gmt":"2026-10-29T08:00:00","guid":{"rendered":"https:\/\/yindle.com\/?p=150"},"modified":"2026-09-21T22:09:31","modified_gmt":"2026-09-21T20:09:31","slug":"parent-child-cartregels-samengestelde-producten","status":"publish","type":"post","link":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/","title":{"rendered":"Parent-child cart lines for composite products"},"content":{"rendered":"<p><strong>Treat <a href=\"\/en\/woocommerce-configurators-with-real-products\/\">the main product and chosen components<\/a> as one configuration group, even when they technically consist of several WooCommerce cart lines.<\/strong> Retain a stable group relationship, scale dependent quantities together and prevent required children being left behind when the main product is removed.<\/p>\n<p>This parent-child relationship becomes necessary when options are actual products. Without an explicit link, the cart sees only separate rows. Customers can then accidentally remove a mounting kit, session restoration can split the group and order export cannot identify which components form one delivered product.<\/p>\n<h2>Define which lines are dependent<\/h2>\n<p>Not every added product needs a strict connection to the main product. A required frame must be removed with it and scale in quantity. An optional maintenance kit may belong to the configuration but perhaps remain independently. Define for each option type whether removal, quantity changes and return relationships are linked.<\/p>\n<figure class=\"wp-block-table\">\n<table>\n<thead>\n<tr>\n<th>Relationship<\/th>\n<th>When removing the main product<\/th>\n<th>When changing quantity<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Required component<\/td>\n<td>Remove automatically with it<\/td>\n<td>Scale proportionally<\/td>\n<\/tr>\n<tr>\n<td>Optional configuration component<\/td>\n<td>Usually remove with it; explain clearly first<\/td>\n<td>According to the configured ratio<\/td>\n<\/tr>\n<tr>\n<td>One-off service<\/td>\n<td>Reassess the line<\/td>\n<td>Do not automatically double<\/td>\n<\/tr>\n<tr>\n<td>Separate recommended product<\/td>\n<td>May remain independently<\/td>\n<td>Its own quantity<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<p>Use an internal group key created when building the cart and retained on every child line. Do not rely on cart position or product name. Two identical main products with different configurations must each retain their own children.<\/p>\n<p>Do not use the group key to decide pricing or access. It only connects lines within the cart. Prices, availability and allowed add-ons still come from the current catalogue and server rules. Also validate that a child actually points to the intended parent; group data supplied by the browser is not automatically trustworthy.<\/p>\n<h2>Restore the relationship through sessions and orders<\/h2>\n<p>WooCommerce serialises the cart and rebuilds it later. After session restoration, check that every group key remains valid and a parent exists. An orphaned required component must not silently remain purchasable as a standalone product. Show a recovery message or remove the invalid group under a predefined rule.<\/p>\n<p>Carry the same relationship into order lines. Customers see a readable configuration summary; the warehouse and integration also receive separate SKUs and quantities. An ERP integration must not have to guess which items belong together from order-line sequence. <a href=\"\/en\/online-store-erp-integration\/\">Reliably connecting your online store and ERP<\/a> starts with an explicit data model like this.<\/p>\n<p>Decide what price each cart line displays. Some shops show the full amount on the parent and zero prices for components; others price every component separately. Both can work if cart, checkout, order email and administration produce the same total. Do not hide priced components so thoroughly that customers cannot check the breakdown.<\/p>\n<h2>Fictional example: two verandas in one cart<\/h2>\n<p>Garden specialist Buitenlijn sells verandas with posts, gutters and optional lighting. A customer first configures a small veranda with two posts, then a larger one with three. Both main products use the same base model but receive unique groups.<\/p>\n<p>When the customer doubles the quantity of the small veranda, its two associated posts and gutters scale with it. The one-off measuring service does not double; the online store asks whether one visit can cover both verandas. Removing the large veranda removes only the children from that group. The small veranda's lighting remains intact.<\/p>\n<p>At ordering, Buitenlijn retains both individual items and the group summary. Fulfilment can then pick components, and customer service can later explain which set belonged to which veranda. To carry this structure through, <a href=\"\/en\/connect\/\">Yindle Connect<\/a> can make translation to back-end systems manageable.<\/p>\n<p>If one component sells out during checkout, Buitenlijn blocks the entire affected group and identifies the precise problem. The other veranda in the same cart remains recognisable. Customers can edit or remove the affected configuration without rebuilding the whole cart.<\/p>\n<h2>Test matrix for group behaviour<\/h2>\n<ol>\n<li>Add two configurations of the same main product.<\/li>\n<li>Change the quantity of only one group.<\/li>\n<li>Remove the parent, required child and optional child separately.<\/li>\n<li>Reload the session and restore a saved cart.<\/li>\n<li>Make a child product temporarily unavailable.<\/li>\n<li>Apply a coupon to the parent, children and group.<\/li>\n<li>Check cart, checkout, order email, warehouse and ERP export.<\/li>\n<li>Test cancellation and partial returns without losing relationships.<\/li>\n<\/ol>\n<p>Make group behaviour visible in the interface. Automatic scaling is useful, but an unexpectedly changed quantity feels like an error. Briefly explain why a component changes too and provide a deliberate choice for exceptions. If standard extensions cannot support this model, explore <a href=\"\/en\/custom-vs-off-the-shelf-software\/\">the choice between custom and standard software<\/a>.<\/p>\n<p><a href=\"\/en\/contact\/\">Have Yindle design the parent-child structure of your composite products.<\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>An explicit group relationship prevents orphaned components and makes composite orders explainable.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-150","post","type-post","status-publish","format-standard","hentry","category-e-commerce"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Parent-childcartregels in WooCommerce<\/title>\n<meta name=\"description\" content=\"Houd hoofdproduct en configuratieonderdelen als \u00e9\u00e9n groep bij verwijderen, aantallen, sessieherstel, orderweergave en ERP-overdracht.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Parent-childcartregels in WooCommerce\" \/>\n<meta property=\"og:description\" content=\"Houd hoofdproduct en configuratieonderdelen als \u00e9\u00e9n groep bij verwijderen, aantallen, sessieherstel, orderweergave en ERP-overdracht.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/\" \/>\n<meta property=\"og:site_name\" content=\"Yindle\" \/>\n<meta property=\"article:published_time\" content=\"2026-10-29T08:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/yindle.com\/wp-content\/themes\/yindle\/assets\/images\/yindle-social-share.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Yindle\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yindle\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/\"},\"author\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#organization\"},\"headline\":\"Parent-childcartregels voor samengestelde producten\",\"datePublished\":\"2026-10-29T08:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/\"},\"wordCount\":728,\"publisher\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#organization\"},\"articleSection\":[\"E-commerce\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/\",\"url\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/\",\"name\":\"Parent-childcartregels in WooCommerce\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#website\"},\"datePublished\":\"2026-10-29T08:00:00+00:00\",\"description\":\"Houd hoofdproduct en configuratieonderdelen als \u00e9\u00e9n groep bij verwijderen, aantallen, sessieherstel, orderweergave en ERP-overdracht.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/parent-child-cart-lines-for-composite-products\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/yindle.com\\\/en\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Parent-childcartregels voor samengestelde producten\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/yindle.com\\\/en\\\/\",\"name\":\"Yindle\",\"description\":\"Software voor e-commerce en klantprocessen\",\"publisher\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/yindle.com\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#organization\",\"name\":\"Yindle B.V.\",\"url\":\"https:\\\/\\\/yindle.com\\\/en\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/yindle.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/yindle-site-icon.png\",\"contentUrl\":\"https:\\\/\\\/yindle.com\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/yindle-site-icon.png\",\"width\":512,\"height\":512,\"caption\":\"Yindle B.V.\"},\"image\":{\"@id\":\"https:\\\/\\\/yindle.com\\\/en\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"legalName\":\"Yindle B.V.\",\"address\":{\"@type\":\"PostalAddress\",\"streetAddress\":\"Markt 43\",\"postalCode\":\"5554 CA\",\"addressLocality\":\"Valkenswaard\",\"addressCountry\":\"NL\"},\"identifier\":{\"@type\":\"PropertyValue\",\"propertyID\":\"KvK\",\"value\":\"99695367\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Parent-child cart lines in WooCommerce","description":"Keep the main product and configuration components as one group through removal, quantity changes, session restoration, order display and ERP transfer.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/","og_locale":"en_GB","og_type":"article","og_title":"Parent-childcartregels in WooCommerce","og_description":"Houd hoofdproduct en configuratieonderdelen als \u00e9\u00e9n groep bij verwijderen, aantallen, sessieherstel, orderweergave en ERP-overdracht.","og_url":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/","og_site_name":"Yindle","article_published_time":"2026-10-29T08:00:00+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/yindle.com\/wp-content\/themes\/yindle\/assets\/images\/yindle-social-share.png","type":"image\/png"}],"author":"Yindle","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Yindle","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/#article","isPartOf":{"@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/"},"author":{"@id":"https:\/\/yindle.com\/en\/#organization"},"headline":"Parent-childcartregels voor samengestelde producten","datePublished":"2026-10-29T08:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/"},"wordCount":728,"publisher":{"@id":"https:\/\/yindle.com\/en\/#organization"},"articleSection":["E-commerce"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/","url":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/","name":"Parent-child cart lines in WooCommerce","isPartOf":{"@id":"https:\/\/yindle.com\/en\/#website"},"datePublished":"2026-10-29T08:00:00+00:00","description":"Keep the main product and configuration components as one group through removal, quantity changes, session restoration, order display and ERP transfer.","breadcrumb":{"@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/yindle.com\/en\/parent-child-cart-lines-for-composite-products\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/yindle.com\/en\/"},{"@type":"ListItem","position":2,"name":"Parent-childcartregels voor samengestelde producten"}]},{"@type":"WebSite","@id":"https:\/\/yindle.com\/en\/#website","url":"https:\/\/yindle.com\/en\/","name":"Yindle","description":"Software for e-commerce and customer processes","publisher":{"@id":"https:\/\/yindle.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/yindle.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/yindle.com\/en\/#organization","name":"Yindle B.V.","url":"https:\/\/yindle.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/yindle.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/yindle.com\/wp-content\/uploads\/2026\/09\/yindle-site-icon.png","contentUrl":"https:\/\/yindle.com\/wp-content\/uploads\/2026\/09\/yindle-site-icon.png","width":512,"height":512,"caption":"Yindle B.V."},"image":{"@id":"https:\/\/yindle.com\/en\/#\/schema\/logo\/image\/"},"legalName":"Yindle B.V.","address":{"@type":"PostalAddress","streetAddress":"Markt 43","postalCode":"5554 CA","addressLocality":"Valkenswaard","addressCountry":"NL"},"identifier":{"@type":"PropertyValue","propertyID":"KvK","value":"99695367"}}]}},"_links":{"self":[{"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/posts\/150","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":1,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":821,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/posts\/150\/revisions\/821"}],"wp:attachment":[{"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/yindle.com\/en\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}