{"id":372603,"date":"2026-09-24T00:17:50","date_gmt":"2026-09-24T00:17:50","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cartox-bulk-product-manager\/"},"modified":"2026-09-24T00:17:12","modified_gmt":"2026-09-24T00:17:12","slug":"cartovum-bulk-product-manager","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/cartovum-bulk-product-manager\/","author":23552791,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.9","stable_tag":"1.3.9","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Cartovum Bulk Product Manager","header_author":"Cartovum Agency","header_description":"A WooCommerce product management tool that makes finding products, bulk editing stock status and attributes, and everyday product administration faster and easier. Changes run in small batches, every run is logged, and any run can be put back.","assets_banners_color":"","last_updated":"2026-09-24 00:17:12","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/cartovumagency.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":48,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description"],"tags":{"1.3.9":{"tag":"1.3.9","author":"sanjubgd2024","date":"2026-09-24 00:17:12","revision":3710338}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3710338,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710338,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[],"plugin_category":[],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-372603","plugin","type-plugin","status-publish","hentry","plugin_committers-sanjubgd2024"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cartovum-bulk-product-manager\/assets\/icon-128x128.png?rev=3710338","icon_2x":"https:\/\/ps.w.org\/cartovum-bulk-product-manager\/assets\/icon-256x256.png?rev=3710338","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Developed by Cartovum Agency (https:\/\/cartovumagency.com). \"View details\" at the top of the screen shows\nthe installed version, features, and compatibility.<\/p>\n\n<h3>Where it lives<\/h3>\n\n<p>Products -&gt; Bulk Stock &amp; Attributes\n\/wp-admin\/edit.php?post_type=product&amp;page=swbm-bulk-manager<\/p>\n\n<p>Requires the \"manage_woocommerce\" capability (shop managers and administrators).<\/p>\n\n<h3>What it does<\/h3>\n\n<p>Find products by name, by a list of SKUs, by category, by stock status, by published state, or by\nan attribute and one of its values. Select what you find, across pages, then either:<\/p>\n\n<ul>\n<li>set the stock status of everything selected, or<\/li>\n<li>run one attribute operation across everything selected:\n\n<ul>\n<li>add values to an attribute<\/li>\n<li>remove values from an attribute<\/li>\n<li>replace the values of an attribute<\/li>\n<li>remove the attribute<\/li>\n<li>set the value of a local attribute<\/li>\n<\/ul><\/li>\n<\/ul>\n\n<p>The browser sends the selection to the server in batches of ten, so no single request has to do\nall the work. Progress is shown while it runs and every product gets its own line in the results:\nchanged, skipped, or failed, each with the reason.<\/p>\n\n<h3>What it will not do<\/h3>\n\n<ul>\n<li>It never creates a global attribute or an attribute value. Only values that already exist can be\nchosen, so a typo cannot quietly add a new term.<\/li>\n<li>It never converts a local (custom) attribute into a global one, or the other way round. If a\nproduct already carries a local attribute of the same name, adding the global one is skipped and\nsaid so, rather than leaving the product with two attributes of one name.<\/li>\n<li>It leaves variable products alone, and leaves any attribute marked \"used for variations\" alone.<\/li>\n<li>It skips products whose stock is quantity-managed, because WooCommerce works their stock status\nout from the quantity.<\/li>\n<li>It never deletes a product, a variation, a category, an attribute, or an attribute term.<\/li>\n<\/ul>\n\n<h3>How it protects the rest of the product<\/h3>\n\n<p>Before each write the product is fingerprinted: name, SKU, prices, description, images, gallery,\ncategories, tags, tax, shipping class, weight, dimensions, stock quantity, backorders, menu order,\ncatalogue visibility, and attributes. After the write the fingerprint is taken again. Anything that\nchanged but was not part of the requested operation is reported as a failure rather than passing\nsilently.<\/p>\n\n<p>Every change goes through the WooCommerce product API, so lookup tables, caches, feeds and other\nintegrations stay in step exactly as they do when a product is saved by hand.<\/p>\n\n<h3>Converting typed attributes to shared attributes<\/h3>\n\n<p>The \"Convert typed attributes\" panel moves a typed (local) attribute onto the shared attribute with the\nsame name, for example the typed Rim Size value <code>18<\/code> onto the shared Rim Size value <code>18\"<\/code> (18 inches).<\/p>\n\n<ul>\n<li>A typed value only moves when it matches exactly one shared value once units and quotation marks are\nset aside (<code>18<\/code> matches <code>18\"<\/code>, <code>112<\/code> matches <code>112mm<\/code>), or when an administrator has approved that\nspecific mapping.<\/li>\n<li>Values on hold, values with no match, and values matching more than one shared value block the whole\nproduct. It is left exactly as it is and listed under \"Needs attention\".<\/li>\n<li>If the product already has the shared attribute with the same value, only the typed copy is removed.\nIf the values differ, the product is blocked.<\/li>\n<li>Each product converts in a single save and keeps every attribute's position and visibility. After the\nsave it is read back: converted attributes must hold exactly the planned values, other attributes must\nbe untouched, and nothing outside the attributes may have changed.<\/li>\n<li>Run the dry run first. It records a signature for every product; a product edited after the dry run is\nskipped rather than overwritten. A conversion run stops at the first product that fails its check.<\/li>\n<li>Conversion runs appear in Recent runs and can be put back like any other run.<\/li>\n<\/ul>\n\n<p>Approved mappings, held values and the list of values created for the migration are stored in the\noptions swbm_convert_overrides, swbm_convert_holds and swbm_convert_new_terms.<\/p>\n\n<h3>Putting a run back<\/h3>\n\n<p>Each run is recorded with the state of every product before and after the change. In \"Recent runs\",\n\"Put back\" restores the products that run changed. A product that has changed since is skipped\nrather than overwritten. The last 25 runs are kept.<\/p>","raw_excerpt":"Bulk-edit WooCommerce stock status and product attributes in small batches, with a change log and put-back.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/372603","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=372603"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/sanjubgd2024"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=372603"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=372603"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=372603"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=372603"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=372603"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=372603"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}