Markup by Attribute for WooCommerce


Varying Prices on Product Variations is Tedious and Error-Prone

Want to add $5 to every blue product you sell? Maybe you sell jewelry with birthstones, and some stones just cost more than others. If all “X-Large” products cost 7.5% more, you have to manually calculate and change every “X-Large” variation of every product.

Markup by Attribute Adds ‘Markup’ to Attribute Terms

Markup by Attribute solves this problem by allowing you to add a markup (or markdown) to global attribute terms. If the attribute is ‘color’, then Markup by Attribute allows you to add “+5″ to Blue while leaving Green and Yellow alone. When you set regular and sale prices, every blue product will be $5.00 more.

Markup by Attribute:

  • Can create a fixed value markup (such as $5), or a percentage markup (such as 5%).
  • The markup value can be positive yielding an increase in price, or negative yielding a decrease in price.
  • Uses familiar WooCommerce bulk edit actions Set regular price and Set sale price.
  • Puts the price increase (or decrease) in the options drop-down box alongside of the terms, so customers can make informed decisions. (Or, optionally, does not).
  • Can write a breakdown of the price modifications in the variation description, so the itemization is visible to the customer.
  • Has been tested with Gutenberg and is fully compatible.


  • Note the addition of the “Markup (or markdown)” field on the bottom of the Add new *attribute* panel of the attribute editor.
  • Note the addition of the “Markup (or markdown)” field on the bottom of the Edit *attribute* screen of the attribute editor.
  • The regular price is $18.95. Markup by Attribute added $6 for a logo and $1.42 for extra large.
  • The customer sees the full range of sale prices available and how much each option costs, plus a clear description of the breakdown.
  • Markdowns (negative markups) can be used as well.
  • Markups are applied to sale prices just as they are with regular prices.
  • The settings page allows configuration of how the markup is displayed.


In this section:

  • Manual Installation
  • Automated Installation
  • Using Markup-by-Attribute for WooCommerce

Manual Installation

  1. Download the Markup by Attribute for WooCommerce ZIP file.

  2. Unzip the plugin files to the /wp-content/plugins/markup-by-attribute-for-woocommerce directory.

  3. Activate the plugin through the WordPress Plugins page.

Automated Installation

  1. Locate the Markup by Attribute for WooCommerce plugin using the search box on the in WordPress PluginsAdd New page.

  2. Install the plugin using the [Install] button.

  3. The [Install] button will change to an [Activate] button. Use it to activate the plugin.

Using Markup by Attribute for WooCommerce

(Detailed instructions can be found at Markup by Attribute Wiki.)

NOTE: These instructions assume you are familiar with WooCommerce global Product Attributes and with WooCommerce Product Variations. If not, you may want to review the WooCommerce documentation on Product Attributes and Variable Products.

Three Easy Steps

  1. While creating new global attribute terms or editing existing ones, add the markup.
    • If the option needs a markup, put the amount of the markup in the term’s Markup field on either the Add new attribute panel or the Edit attribute panel.
    • Examples of valid values include: ‘-5’, ‘5.95’, ‘+5.678’, ‘7.5%’, and ‘-12%’.
  2. Create product variations as you normally would.
    • Markup by Attribute requires variable products because it changes the price of each variation.
    • Using Create variations from all attributes is the easiest way to ensure you have all combinations.
    • Do not have a variation with “Any” in an attribute with a markup because WooCommerce will choose the “Any” variation regardless of others that may exist. So, if XX-Large is 5% more, you cannot have one variation for “XX-Large” and another for “Any size” to cover the rest because WooCommerce assumes “Any size” includes “XX-Large”.
  3. Use the Set regular price and Set sale price bulk edit functions as you normally would. (NOTE: If you’ve already set the prices before installing Markup-by-Attribute, you will need to do it again to apply the markup).
    • The markup will be applied to the price according to the attribute terms associated with the variation.
    • A description of the markup will be added to the variation description.
      Product Price 18.95
      Add 2.00 for Logo
    • TIP: If you change the markup later, repeat this step to recalculate the markup for this product. Or do not repeat the step to leave the previous markups unchanged.
    • TIP: Always set the regular price before setting a sale price. Percentage markups are calculated on the regular price, so they cannot be applied to a sale price if the regular price has not been set.

Preguntas frecuentes

If I change the markup for an attribute, how will product prices change?

Markup by Attribute works within the framework provided by WooCommerce and sets product variation markups (or markdowns) during the Set regular price and Set sale price actions. Therefore, you must locate the products affected by this change and reset the regular and sale prices.

It’s not working. Why?

When I get this question, it is usually because people want the prices to change as soon as they add or adjust a markup. The way Markup by Attribute was built, however, requires that you run the Set regular prices function for the variations.

If you’ve used Set regular pricesand it still doesn’t update the prices properly, you may have a variation with an “Any” attribute. If you have six sizes, for instance, but you have one product variation with “Any size”, then WooCommerce will pick that one. The important take-away here is that you shouldn’t have a variation with “Any attribute”, if that attribute has a markup.

If it’s neither of these things, please check the support forums.

What if I change an attribute’s markups but do not want to change products marked up previously?

Then do nothing. Prices, descriptions, and option drop-downs for products will remain at whatever value they were set to last time you ran the Set regular price or Set sale price bulk variation activities.

Does this support languages other than English?

Yes. However, the developer only speaks American English. I can provide ‘Google Translate’ versions of other languages, but I would prefer it if a native speaker translated the text. The .POT file is found in the /languages folder of the plugin. If you don’t have access to your server, you can also find it on GitHub.

What’s a .POT file? If you’d like to help but don’t know how to use a template file, don’t worry. A .POT file is a text file that contains all the English phrases found in Markup-by-Attribute. You can simply open it and translate what you read there. Send me the translations and I will incorporate them in the next release.

Many thanks to Zjadlbymcos on GitHub for his Polish Translation and @silentstepsch for several variations of German.

I’d like to donate.

Thanks! The donation button assumes $5.00 USD. But please don’t hesitate to adjust that amount up or down as you feel it’s appropriate. I’m a retired guy who’s living off his savings, so every bit helps.

If you use Markup by Attribute and want to see me continuing support for it, I encourage you to encourage me with a small donation.


9 de noviembre de 2022 1 respuesta
Really not happy that this plugin hasn’t been updated in 9 months and is not compatible with relatively recent latest versions of WooCommerce, PHP, or WordPress. Had high hopes as I needed over 100 variations – it built the variations with no problem, but after working to set the pricing, all work disappears at some random point in time – all the variations, everything. Happened multiple times – hours of work wasted. Plugin Author – please consider fixing this. Thank you.
5 de septiembre de 2022
I add this plugin to every cart I set up. It does exactly what it says it will.
11 de abril de 2022 1 respuesta
This saved many hours of work in a WooCommerce project which had thousands of product variants, now able to add prices at a root level rather than editing every variant instance.
21 de febrero de 2022 1 respuesta
Hey, this was sorely needed for Woocommerce apparel shops. Too bad I just found it today. Works perfectly, saves a lot of headache. Hope you keep it updated.
Leer todas las 23 reseñas

Colaboradores y desarrolladores

Este software es de código abierto. Las siguientes personas han contribuido a este plugin.


“Markup by Attribute for WooCommerce” ha sido traducido a 1 idioma local. Gracias a los traductores por sus contribuciones.

Traduce “Markup by Attribute for WooCommerce” a tu idioma.

¿Interesado en el desarrollo?

Revisa el código, echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios


Build 202414.01
* FIX: Add code to handle manually added attributes for GitHub issue #28. ( Thanks to g-alfieri for suggesting a fix.


Build 202414.01
* MAINTENANCE: Extensive revisions to /src/product.php for readability and performance.
* MAINTENANCE: Smaller revisions throughout code for readability and performance.
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.


Build 202343.01
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.
* FIX: Added compatibility to WooCommerce HPOS (High-Performance Order Storage). No changes to operation; just added a compatibility declaration and admin message.


Build 202332.01
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.
* FIX: Corrected a minor formatting error in the variation descriptions.


Build 202308.01
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.
Build 202308.02
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.


Build 202245.01
* MAINTENANCE: Ensured compatibility with current versions of WordPress, WooCommerce, and PHP.
* MAINTENANCE: Resolved a PHP ‘depreciation’ warning.
* FIX: Fixed a bug where Markup-by-Attribute would get confused about the decimal separator because the server and WooCommerce localization settings conflict.
Build 202245.02
* MAINTENANCE: Changed the default on Sale Price Markup to ‘yes’.


Build 202208.01
* FIX: Correct Doubled currency symbol.
* MAINTENANCE: Tested with PHP 8.0.16 and updated PHP tested up to: information.
* MAINTENANCE: Tested with WordPress 5.9.1 and updated Tested up to: information.
* MAINTENANCE: Tested with WooCommerce 6.2.1 and updated WC tested up to: information.
* MAINTENANCE: Added Apache tested up to: 2.4.41 information.
* MAINTENANCE: Added MySQL tested up to: 8.0.28 information.
Build 202208.02
* MAINTENANCE: Corrected versioning information.


Build 202207.01
* FIX: Correct floating-point conversion error for percentage markups over four digits long (< -1,000, > +1,000).


Build 202205.01
* MAINTENANCE: Extensive clean-up.
* MAINTENANCE: Used wc-price() function instead of DIY formatting for better compatibility.
* MAINTENANCE: Tested with PHP 8.0.15 and updated PHP tested up to: information.
* MAINTENANCE: Tested with WordPress 5.9 and updated Tested up to: information.
* MAINTENANCE: Tested with WooCommerce 6.1.1 and updated WC tested up to: information.


Build 202152.01
* FIX: Commented out unneeded module testing because it prevents Markup-by-Attribute from working on some sites. Will re-include after I determine why it did not work.


Build 202152.01
* FEATURE: Allows you to calculate percentage markups on sale prices instead of always using the regular price calculation.
* FEATURE: Adds a sortable Markup column to the attribute list view and eliminates the markup notation from the description.
* MAINTENANCE: Added test to not load unneeded modules.
* MAINTENANCE: Minor code and comment cleanup.
* MAINTENANCE: Tested with PHP 8.0.14 and updated PHP tested up to: information.
* MAINTENANCE: Tested with WordPress 5.8.2 and updated Tested up to: information.
* MAINTENANCE: Tested with WooCommerce 6.0.0 and updated WC tested up to: information.


Build 202113.02
* FIX: Empty and non-zero evaluations are no longer the same in PHP 8. Corrected to check each individually.
* MAINTENANCE: Tested with PHP 8.0.3 and update PHP tested up to: information.
Build 202113.03
* MAINTENANCE: Add customer facing Swedish translations.
* MAINTENANCE: Tested with PHP 8.0.8, WordPress 5.7.2, WooCommerce 5.4.1.


  • MAINTENANCE: Tested with WordPress 5.7 and include new Tested up to: information.
  • MAINTENANCE: Tested with WooCommerce 5.1.0 and include new WC tested up to: information.


  • FIX: Consolidate constants.


  • FIX: Corrected issue with ATTRB_MARKUP_DESC_END vs. ATTRB_MARKUP_END.


  • MAINTENANCE: Tested with WooCommerce 4.3.0 and include new Tested to: information.


  • FIX: Corrected issue when website directory path contains mixed case.


  • FIX: Corrected issue where Markup-by-Attribute might overwrite another plugin or theme’s option selection.
  • FEATURE: Add option to overwrite the term name to include the markup.
  • MAINTENANCE: General clean up and commenting.


  • Translation: Further corrections to language files and created versions for German variations. (Thanks to silentstepsch.)
  • MAINTENANCE: Include new Tested to: information.


  • Translation: Corrected German language files — thanks to Roland Pohl.


  • FEATURE: Add option to hide base price in product description.
  • Translation: Add German translation


  • FIX: Correct ‘hide’ option of option drop-down box.
  • FIX: Remove non-functioning or incorrectly implemented options.
  • FIX: Corrected the way the markup was saved to metadata (stopped rounding).
  • MAINTENANCE: Include new Tested to: information.


  • FIX: Show hidden attribute terms to correct error where WordPress/WooCommerce wrongly considers the term as unused.
  • MAINTENANCE: Updated instructions.
  • MAINTENANCE: Removed v2.4 upgrade message.


  • FEATURE: For compatibility with plugins that remove the options drop-down box, the Include the Increase (Decrease) in the Term Name option allows markups to show when the drop-down box is not available.
  • FEATURE: For compatibility with plugins that remove the options drop-down box, the Do NOT show the markup in the options drop-down box option now doesn’t load the MT2MBA_FRONTEND_OPTIONS class.
  • FIX: Fixed bug where adding and removing a sales price would leave the markup as the new sales price.


  • FEATURE: Add option to calculate percentage markups from sale prices rather than regular prices.
  • FIX: Option ‘Do NOT show the markup in the options drop-down box’ showed slug in drop-down box instead of term name. Corrected to always show name for global attributes.
  • MAINTENANCE: Renamed Attrb.php to Term.php, since it actually affects the terms and not the general attribute.
  • MAINTENANCE: Added donation language to Settings page.


  • FEATURE: Added ability to round percentage markups, so prices will retain digits below decimal. For shops that want to end all prices with .00, .95, .99 or whatever. Requested feature from shop where all prices end in .00.
  • FEATURE: Fully tested with Gutenberg.
  • FEATURE: Added Polish language files.


  • FEATURE: Now supports Internationalization and translation.
  • MAINTENANCE: Simplified usage directions in readme.txt.
  • MAINTENANCE: Restructured libraries and renamed files and classes for better organization.
  • MAINTENANCE: Rebuilt admin notice class for supportability and improved performance.
  • MAINTENANCE: Reorganized main module for understandability.
  • MAINTENANCE: General code clean-up and redundancy removal.


  • FIX: Corrected “Requires PHP” version number in readme.txt.
  • FIX: Updated “WC tested up to” version number in readme.txt.
  • FIX: Eliminated unused “Docs” folder


  • FEATURE: Use the WooCommerce currency formatting settings.
  • FIX: Re-ensure documentation is clear that this works on “global” attributes.


  • FEATURE: Add option to not display markup in the options drop-down box.
  • FIX: Add missing ‘Author:’ tag.
  • FIX: Ensure documentation is clear that this works on “global” attributes.
  • FIX: Version 2.3 exposes a problem in an earlier version’s database conversion where percentage markups show incorrectly in the options drop-down (For instance, a 10% markup on $40 shows as $10 instead of $4). To patch around it, version 2.3 will put the percentage in the drop-down instead of the actual markup. These items will need to have their regular prices reset to have the actual markup appear.


  • FIX: Plugin name and Description.
  • FIX: Markup calculation on sale prices when using a percentage markup (percent of the regular price, not sale price).
  • FIX: Clear Markup-by-Attribute metadata from the database on variation deletion.


  • FEATURE: Organize Settings page with subheadings.
  • FEATURE: Provide a link to the wiki from Settings page.
  • FEATURE: Expand wiki to include help with settings.
  • FIX: Improve readme.txt readability.


  • FEATURE: The new Settings page allows for increasing the number of variations that can be created at a time (override WooCommerce’s limit of 50).
  • FEATURE: The new Settings page allows for modifying the way pricing markup is added to the variation descriptions (overwrite, append, or ignore).
  • FEATURE: The new settings page allows configuration of the way the markup is displayed, including the number of decimals and the currency symbol.
  • FEATURE: Markup description now enclosed in tags and can be modified with CSS (#mbainfo {}).
  • FEATURE: Markup description added to the attribute term description and can be seen in the attribute term list.
  • FEATURE: Markup now saved as a floating-point number and not limited to only two digits below the decimal point.
  • FEATURE: Database and code change to enhance supportability.
  • FIX: Corrected issue where Increase/Decrease Regular/Sale Price functions calculated based on variation price rather than base price, yielding incorrect prices when percentages were used.
  • FIX: Corrected issue where Increase/Decrease Regular/Sale Price functions did not update variation descriptions.
  • FIX: Corrected issue where markup in the options drop-down was calculated from the sale price.


FIX: Eliminate bug where default variation options were not being selected and Choose an Option was always shown.


FIX: Remove error_log() statement accidentally left in.


  • FEATURE: Added class backend-pointers for inline instructions.
  • FEATURE: Added instructions link to Plugins page.
  • FIX: Use only regular price markup in attribute drop-down on the frontend. Percentage markups were appearing different in dropdown and variation description.


  • Change backend-attrb and backend-product to allow percentage markup.
  • Change backend-product and frontend to store actual product-attribute markups in post meta.


  • Added code to class backend-attrb to prevent adjusting the price when price field is NULL.


  • Moved markup from term Description to a new metadata field.
  • Added metadata field to term Add and Edit panels.
  • Broke class-mt2-markup-backend.php into class-mt2-markup-backend-attrb.php and class-mt2-markup-backend-product.php for supportability.
  • Cleaned code and added comments for readability.


  • Initial version.