{"id":378149,"date":"2026-10-03T05:19:18","date_gmt":"2026-10-03T05:19:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/measure-and-price-for-woocommerce\/"},"modified":"2026-10-03T10:50:57","modified_gmt":"2026-10-03T10:50:57","slug":"essence-measure-and-price","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/essence-measure-and-price\/","author":23575011,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.2","stable_tag":"0.1.2","tested":"7.1.2","requires":"6.6","requires_php":"7.4","requires_plugins":null,"header_name":"Essence Measure and Price for WooCommerce","header_author":"Essence Design","header_description":"Sell by length, area, weight or volume. Customers enter how much they need; the shop gets a whole number of packs at a clear price, with the measurement carried through to the order.","assets_banners_color":"564465","last_updated":"2026-10-03 10:50:57","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/essence-design.co.uk\/plugins\/measure-and-price\/","header_author_uri":"https:\/\/essence-design.co.uk\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":70,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.1":{"tag":"0.1.1","author":"essencedesign","date":"2026-10-03 05:18:51","revision":3725780},"0.1.2":{"tag":"0.1.2","author":"essencedesign","date":"2026-10-03 10:50:57","revision":3726128}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3725780,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3725780,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3725780,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3725780,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3725780,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3726130,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/product\\\/oak-flooring\\\/\",\"preferredVersions\":{\"php\":\"8.3\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"storefront\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"essence-measure-and-price\"},\"options\":{\"activate\":true}},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Willow & Plank\",\"blogdescription\":\"Flooring and fabric by the metre\",\"woocommerce_currency\":\"GBP\",\"woocommerce_default_country\":\"GB\",\"woocommerce_store_address\":\"1 Sample Street\",\"woocommerce_store_city\":\"Bristol\",\"woocommerce_store_postcode\":\"BS1 1AA\",\"woocommerce_onboarding_profile\":{\"skipped\":true},\"woocommerce_task_list_hidden\":\"yes\",\"woocommerce_calc_taxes\":\"no\",\"woocommerce_coming_soon\":\"no\",\"woocommerce_weight_unit\":\"kg\",\"woocommerce_dimension_unit\":\"cm\"}},{\"step\":\"runPHP\",\"code\":\"<?php require_once '\\\/wordpress\\\/wp-load.php'; $cats = array(); foreach ( array( 'Flooring', 'Fabric' ) as $name ) { $term = term_exists( $name, 'product_cat' ); if ( ! $term ) { $term = wp_insert_term( $name, 'product_cat' ); } $cats[ $name ] = (int) ( is_array( $term ) ? $term['term_id'] : $term ); } $mp = function ( $id, $settings ) { $defaults = array( 'sold_by' => 'each', 'pricing_unit' => '', 'price_per' => 'unit', 'input_mode' => 'amount', 'input_unit' => '', 'step' => '1', 'step_label' => '', 'min' => '', 'max' => '', 'waste_percent' => '', 'also_show' => 'none', 'weight_per_unit' => '', 'show_unit_price' => 'yes' ); foreach ( array_merge( $defaults, $settings ) as $key => $value ) { update_post_meta( $id, '_esd_mp_' . $key, $value ); } }; $oak = new WC_Product_Simple(); $oak->set_name( 'Oak flooring' ); $oak->set_regular_price( '24.99' ); $oak->set_weight( '1.8' ); $oak->set_short_description( 'Engineered oak boards, 18 cm wide and 14 mm thick. Sold by the square metre in packs of 2.5 m\\u00b2.' ); $oak->set_category_ids( array( $cats['Flooring'] ) ); $oak->set_status( 'publish' ); $oak_id = $oak->save(); $mp( $oak_id, array( 'sold_by' => 'area', 'pricing_unit' => 'm2', 'input_unit' => 'm2', 'step' => '2.5', 'step_label' => 'pack', 'waste_percent' => '10', 'also_show' => 'imperial', 'weight_per_unit' => '1.8' ) ); $linen = new WC_Product_Simple(); $linen->set_name( 'Linen fabric' ); $linen->set_regular_price( '12.50' ); $linen->set_weight( '0.3' ); $linen->set_short_description( 'Natural undyed linen, 140 cm wide. Cut to the nearest 10 cm.' ); $linen->set_category_ids( array( $cats['Fabric'] ) ); $linen->set_status( 'publish' ); $linen_id = $linen->save(); $mp( $linen_id, array( 'sold_by' => 'length', 'pricing_unit' => 'm', 'input_unit' => 'm', 'step' => '0.1', 'min' => '1' ) ); $velvet = new WC_Product_Variable(); $velvet->set_name( 'Velvet fabric' ); $velvet->set_short_description( 'Cotton velvet, 140 cm wide, in red or blue. Cut to the nearest 10 cm.' ); $velvet->set_category_ids( array( $cats['Fabric'] ) ); $velvet->set_status( 'publish' ); $attribute = new WC_Product_Attribute(); $attribute->set_name( 'Colour' ); $attribute->set_options( array( 'Red', 'Blue' ) ); $attribute->set_visible( true ); $attribute->set_variation( true ); $velvet->set_attributes( array( $attribute ) ); $velvet_id = $velvet->save(); foreach ( array( 'Red' => '15', 'Blue' => '18' ) as $colour => $price ) { $variation = new WC_Product_Variation(); $variation->set_parent_id( $velvet_id ); $variation->set_attributes( array( 'colour' => $colour ) ); $variation->set_regular_price( $price ); $variation->set_status( 'publish' ); $variation->save(); } WC_Product_Variable::sync( $velvet_id ); $mp( $velvet_id, array( 'sold_by' => 'length', 'pricing_unit' => 'm', 'input_unit' => 'm', 'step' => '0.1' ) ); global $wp_rewrite; $wp_rewrite->set_permalink_structure( '\\\/%postname%\\\/' ); flush_rewrite_rules();\"},{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"}]}"}},"all_blocks":{"essence-design\/measure-and-price":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"essence-design\/measure-and-price","version":"0.1.0","title":"Measure and Price calculator","category":"woocommerce","icon":"calculator","description":"The amount field and live price for a product sold by measurement. Use it in product templates that do not show WooCommerce's add-to-cart hook.","keywords":["measurement","price","calculator","woocommerce"],"textdomain":"essence-measure-and-price","supports":{"html":false,"multiple":false},"usesContext":["postId","postType"],"editorScript":"file:.\/index.js","render":"file:.\/render.php"}},"tagged_versions":["0.1.1","0.1.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3725780,"resolution":"1","location":"assets","locale":"","width":2174,"height":1306},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3725780,"resolution":"2","location":"assets","locale":"","width":1608,"height":3156},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3725780,"resolution":"3","location":"assets","locale":"","width":2300,"height":828},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3725780,"resolution":"4","location":"assets","locale":"","width":1608,"height":712},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3725780,"resolution":"5","location":"assets","locale":"","width":2174,"height":3142},"screenshot-6.png":{"filename":"screenshot-6.png","revision":3725780,"resolution":"6","location":"assets","locale":"","width":2174,"height":1428}},"screenshots":{"1":"The product page: the customer types the amount, and the summary shows packs, coverage and price before they add it.","2":"The Sold by tab in the product editor, with an explanation under every setting.","3":"The basket: a whole number of packs at the pack price, with the amount underneath.","4":"The order: the amount is recorded on the line, and packs count as quantity for stock, refunds and reports.","5":"Shop lists show the price per unit.","6":"Variable products: the chosen variation sets the price per unit."}},"plugin_section":[],"plugin_tags":[15432,284124,284126,284125,286],"plugin_category":[45],"plugin_contributors":[284127],"plugin_business_model":[],"class_list":["post-378149","plugin","type-plugin","status-publish","hentry","plugin_tags-price-calculator","plugin_tags-price-per-square-metre","plugin_tags-sell-by-length","plugin_tags-sell-by-weight","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-essencedesign","plugin_committers-essencedesign"],"banners":{"banner":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/banner-772x250.png?rev=3725780","banner_2x":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/banner-1544x500.png?rev=3725780","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/icon.svg?rev=3725780","icon":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/icon.svg?rev=3725780","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-1.png?rev=3725780","caption":"The product page: the customer types the amount, and the summary shows packs, coverage and price before they add it."},{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-2.png?rev=3725780","caption":"The Sold by tab in the product editor, with an explanation under every setting."},{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-3.png?rev=3725780","caption":"The basket: a whole number of packs at the pack price, with the amount underneath."},{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-4.png?rev=3725780","caption":"The order: the amount is recorded on the line, and packs count as quantity for stock, refunds and reports."},{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-5.png?rev=3725780","caption":"Shop lists show the price per unit."},{"src":"https:\/\/ps.w.org\/essence-measure-and-price\/assets\/screenshot-6.png?rev=3725780","caption":"Variable products: the chosen variation sets the price per unit."}],"raw_content":"<!--section=description-->\n<p>Essence Measure and Price lets a WooCommerce shop sell products by length, area, weight or volume. Flooring by the square metre, fabric by the metre, timber by the length, cheese by the kilogram, paint by the litre.<\/p>\n\n<p>The shop sets a price per unit, or a price per pack. The customer types how much they need, or a length and a width, and sees one sentence that says exactly what they will get: how many packs, how much that covers, and what it costs. If the amount rounds up to the next pack, the page says so in plain words before they add it to the cart.<\/p>\n\n<p><strong>What the customer sees<\/strong><\/p>\n\n<ul>\n<li>The price per unit in the shop and on the product page, such as \"\u00a324.99 \/ m\u00b2\".<\/li>\n<li>One field for the amount, or two for length and width.<\/li>\n<li>A live summary: \"5 packs, 12.5 m\u00b2, \u00a3312.40\".<\/li>\n<li>A note when rounding happens: \"12.3 m\u00b2 rounds up to the next pack. Each pack is \u00a362.48.\"<\/li>\n<li>An optional tick box to add a percentage for cuts and waste.<\/li>\n<li>The amount shown again in the cart, at checkout, on the order and in emails.<\/li>\n<\/ul>\n\n<p><strong>What the shop owner sets, per product<\/strong><\/p>\n\n<ul>\n<li>Sold by: length, area, weight or volume.<\/li>\n<li>The pricing unit, metric or imperial.<\/li>\n<li>Whether the price is per unit or per pack.<\/li>\n<li>The step, the smallest amount you sell, such as 2.5 m\u00b2 packs or 0.1 m cuts.<\/li>\n<li>What to call a step, such as pack or box.<\/li>\n<li>Minimum and maximum amounts.<\/li>\n<li>A waste allowance percentage.<\/li>\n<li>Whether to also show the amount in the other measurement system.<\/li>\n<li>Weight per unit, so weight-based shipping stays correct.<\/li>\n<\/ul>\n\n<p><strong>Built to stay out of the way<\/strong><\/p>\n\n<ul>\n<li>Orders always contain a whole number of packs at a normal price, so every payment gateway, shipping method, stock count, refund and report keeps working.<\/li>\n<li>Prices are recalculated on the server. Nothing in the browser can lower a price.<\/li>\n<li>No styling beyond what is needed. The inputs and text inherit your theme.<\/li>\n<li>Works with the classic and the block cart and checkout, and with high-performance order storage.<\/li>\n<li>No admin notices, no upsell banners, no data sent anywhere.<\/li>\n<li>Every setting has a one-line explanation in plain English.<\/li>\n<\/ul>\n\n<p><strong>Page builders<\/strong><\/p>\n\n<p>The calculator appears through WooCommerce's own add-to-cart hook, which themes and most page builders honour. If your product template bypasses it, place the shortcode <code>[measure_and_price]<\/code> where you want the calculator.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate the plugin. WooCommerce must be active.<\/li>\n<li>Edit a product and open the Sold by tab in the Product data box.<\/li>\n<li>Choose what the product is sold by, the unit, and the step. Enter the price on the General tab.<\/li>\n<li>View the product. Type an amount and watch the summary.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20is%20stock%20counted%3F\"><h3>How is stock counted?<\/h3><\/dt>\n<dd><p>In steps. If a product is sold in 2.5 m\u00b2 packs, a stock of 40 means 40 packs. The Sold by tab says this next to the fields.<\/p><\/dd>\n<dt id=\"can%20customers%20change%20the%20quantity%20in%20the%20cart%3F\"><h3>Can customers change the quantity in the cart?<\/h3><\/dt>\n<dd><p>Yes. The quantity is the number of packs or steps. If they change it, the amount shown updates to match.<\/p><\/dd>\n<dt id=\"what%20happens%20with%20a%20price%20like%20%C2%A324.99%20per%20m%C2%B2%20in%202.5%20m%C2%B2%20packs%3F\"><h3>What happens with a price like \u00a324.99 per m\u00b2 in 2.5 m\u00b2 packs?<\/h3><\/dt>\n<dd><p>The pack price is \u00a324.99 \u00d7 2.5 = \u00a362.475, rounded to \u00a362.48, and that is the price shown and charged for every pack. The page tells the customer the pack price. Totals are always the pack price times the number of packs.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20variable%20products%3F\"><h3>Does it work with variable products?<\/h3><\/dt>\n<dd><p>Yes. The Sold by settings apply to the whole product, and each variation uses its own price as the price per unit. Settings that differ per variation, such as a different step or minimum, are in Essence Measure and Price Pro.<\/p><\/dd>\n<dt id=\"does%20it%20handle%20tax%3F\"><h3>Does it handle tax?<\/h3><\/dt>\n<dd><p>No. WooCommerce's own tax settings apply to the pack price as they would to any product.<\/p><\/dd>\n<dt id=\"is%20there%20a%20paid%20version%3F\"><h3>Is there a paid version?<\/h3><\/dt>\n<dd><p>Yes. Essence Measure and Price Pro adds made-to-measure price grids, price lists for larger orders, settings per variation and per category, cutting fees and minimum charges, and set-up from a spreadsheet. Everything in this free plugin stays free, with no limits. Details at https:\/\/essence-design.co.uk\/plugins\/measure-and-price\/pro\/<\/p><\/dd>\n<dt id=\"is%20it%20available%20in%20my%20language%3F\"><h3>Is it available in my language?<\/h3><\/dt>\n<dd><p>English out of the box. Translations are made and delivered through translate.wordpress.org, where German, Dutch, French and Spanish are the first on the way, and help from native speakers of any language is welcome.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.2<\/h4>\n\n<ul>\n<li>The FAQ says what the paid version adds.<\/li>\n<\/ul>\n\n<h4>0.1.1<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Sell by the metre, square metre, kilogram or litre. Customers enter how much they need and get a clear price, packs and rounding explained.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/378149","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=378149"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/essencedesign"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=378149"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=378149"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=378149"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=378149"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=378149"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=378149"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}