{"id":242992,"date":"2025-07-28T22:58:04","date_gmt":"2025-07-28T22:58:04","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/keyword-based-bulk-category-assignment-for-woocommerce\/"},"modified":"2026-08-21T16:40:59","modified_gmt":"2026-08-21T16:40:59","slug":"keyword-based-bulk-category-assignment-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/keyword-based-bulk-category-assignment-for-woocommerce\/","author":23331926,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.4","stable_tag":"1.2.4","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Keyword-Based Bulk Category Assignment for WooCommerce","header_author":"fra.digital","header_description":"Automatically categorize WooCommerce products based on keyword rules with AND\/OR logic, import\/export functionality, and hierarchical category display.","assets_banners_color":"","last_updated":"2026-08-21 16:40:59","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/www.fra.digital\/","header_author_uri":"https:\/\/www.fra.digital\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":490,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"fradigital","date":"2025-07-29 23:16:13"},"1.2.4":{"tag":"1.2.4","author":"fradigital","date":"2026-08-21 16:40:59"}},"upgrade_notice":{"1.2.4":"<p>Existing version 1.0 rules remain available without migration. Export a backup, update the plugin, verify the rules screen, and use the preview on a small product selection before a large production run.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3335591,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-265x265.png":{"filename":"icon-265x265.png","revision":3335591,"resolution":"265x265","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0","1.2.4"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3659381,"resolution":"1","location":"assets","locale":"","width":2642,"height":1292},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3659381,"resolution":"2","location":"assets","locale":"","width":2108,"height":1488},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3659381,"resolution":"3","location":"assets","locale":"","width":3308,"height":1734}},"screenshots":[]},"plugin_section":[],"plugin_tags":[569,11143,472,66485,286],"plugin_category":[45,57],"plugin_contributors":[],"plugin_business_model":[],"class_list":["post-242992","plugin","type-plugin","status-publish","hentry","plugin_tags-automation","plugin_tags-bulk-edit","plugin_tags-keywords","plugin_tags-product-categories","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-taxonomy","plugin_committers-fradigital"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/keyword-based-bulk-category-assignment-for-woocommerce\/assets\/icon-128x128.png?rev=3335591","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/keyword-based-bulk-category-assignment-for-woocommerce\/assets\/screenshot-1.png?rev=3659381","caption":""},{"src":"https:\/\/ps.w.org\/keyword-based-bulk-category-assignment-for-woocommerce\/assets\/screenshot-2.png?rev=3659381","caption":""},{"src":"https:\/\/ps.w.org\/keyword-based-bulk-category-assignment-for-woocommerce\/assets\/screenshot-3.png?rev=3659381","caption":""}],"raw_content":"<!--section=description-->\n<p>Keyword-Based Bulk Category Assignment for WooCommerce reduces repetitive category work after product imports or catalog updates. Create rules once, select products in the WooCommerce Products list, review the exact planned assignments, and apply them only after confirmation.<\/p>\n\n<p>The plugin adds categories to a product. It does not remove unrelated categories that are already assigned.<\/p>\n\n<h4>Main features<\/h4>\n\n<ul>\n<li>Create separate include and exclude rules for every WooCommerce product category.<\/li>\n<li>Use simple terms with OR logic.<\/li>\n<li>Combine multiple required terms in an AND group.<\/li>\n<li>Search product titles, short descriptions, full descriptions, SKUs, and attributes.<\/li>\n<li>Keep the product title as the backward-compatible default search field after an upgrade.<\/li>\n<li>Preview every planned category assignment before products are changed.<\/li>\n<li>See which term or AND group caused a match.<\/li>\n<li>Undo the most recently applied run for the current administrator.<\/li>\n<li>Filter the rules table by category name or show configured categories only.<\/li>\n<li>Save rules from controls directly above or below the rules table.<\/li>\n<li>Export and import rules as compact, legacy-compatible JSON.<\/li>\n<li>Preserve rules created with version 1.0 and its established comma \/ <code>\"AND\"<\/code> syntax.<\/li>\n<\/ul>\n\n<h3>Rule logic<\/h3>\n\n<h4>Simple terms use OR<\/h4>\n\n<p>Enter separate terms as individual chips. A category matches when at least one Contains chip matches the selected product fields.<\/p>\n\n<p>Example:<\/p>\n\n<pre><code>shoes, sneakers, boots\n<\/code><\/pre>\n\n<p>This means <code>shoes OR sneakers OR boots<\/code>.<\/p>\n\n<h4>AND groups require every term<\/h4>\n\n<p>Choose <strong>+ AND group<\/strong>, enter at least two comma-separated terms, and press Enter.<\/p>\n\n<p>Example input in the AND-group editor:<\/p>\n\n<pre><code>red, leather\n<\/code><\/pre>\n\n<p>The plugin stores this as:<\/p>\n\n<pre><code>red \"AND\" leather\n<\/code><\/pre>\n\n<p>Both terms must occur in the searchable product content. Simple terms and AND groups can be combined in the same rule. For example, <code>shoes, red \"AND\" leather<\/code> means <code>shoes OR (red AND leather)<\/code>.<\/p>\n\n<h4>Exclusions take priority<\/h4>\n\n<p>Rules in <strong>Does not contain<\/strong> use the same chip and AND-group logic. If any exclusion chip or exclusion AND group matches, the category is skipped even if a Contains rule matches.<\/p>\n\n<h4>Matching details<\/h4>\n\n<ul>\n<li>Matching is case-insensitive.<\/li>\n<li>HTML markup is ignored.<\/li>\n<li>Repeated whitespace is normalized.<\/li>\n<li>German umlauts are normalized so, for example, <code>M\u00fcller<\/code> also matches <code>mueller<\/code>.<\/li>\n<li>Terms are substring matches; choose specific terms to avoid broad unintended matches.<\/li>\n<\/ul>\n\n<h3>How to use the plugin<\/h3>\n\n<ol>\n<li>Go to <strong>WooCommerce &gt; Category Auto Rules<\/strong>.<\/li>\n<li>Select the product fields that the rules should search. Existing installations default to <strong>Title<\/strong>.<\/li>\n<li>Find the desired category. The category hierarchy and term ID are displayed for clarity.<\/li>\n<li>Add one or more terms under <strong>Contains<\/strong>. Press Enter or leave the input to accept the text.<\/li>\n<li>Add optional exclusions under <strong>Does not contain<\/strong>.<\/li>\n<li>Use <strong>+ AND group<\/strong> when multiple terms must occur together.<\/li>\n<li>Save with the button above or below the table.<\/li>\n<li>Go to <strong>Products<\/strong>, select the products to evaluate, and choose <strong>Apply Category Auto Rules (Preview first)<\/strong> from Bulk actions.<\/li>\n<li>Review the planned assignments and the matching reasons.<\/li>\n<li>Confirm the preview to apply new categories. Use <strong>Undo last run<\/strong> in the success notice if the result needs to be reverted.<\/li>\n<\/ol>\n\n<h3>Import and export<\/h3>\n\n<p>Export downloads all category rules as JSON. The exported structure intentionally keeps the option format used by earlier releases, so it can also be read by version 1.0.<\/p>\n\n<p>Import replaces the current category rules only. Before replacement, version 1.2.4 stores a backup of the previous rules. The <strong>Restore pre-import backup<\/strong> action can swap back to that rule set. The global product-field selection is not overwritten. Imports are restricted to valid JSON files up to 2 MB.<\/p>\n\n<p>Category rules are keyed by WooCommerce term ID. When rules are moved between different stores, corresponding categories should use the same term IDs. Review the imported rows before applying rules to products.<\/p>\n\n<h3>Backward compatibility<\/h3>\n\n<p>Version 1.2.4 continues to use the original <code>keywbuca_category_rules<\/code> WordPress option and the original rule keys <code>contains<\/code> and <code>not_contains<\/code>. Existing rules are available immediately after the update; no destructive migration or activation cleanup runs.<\/p>\n\n<p>The original syntax remains valid:<\/p>\n\n<ul>\n<li>commas separate OR blocks;<\/li>\n<li>the literal <code>\"AND\"<\/code> joins required terms inside one block;<\/li>\n<li>title-only matching remains the default until an administrator enables more fields.<\/li>\n<\/ul>\n\n<p>As a precaution for any production update, export the existing rules and create a normal site\/database backup before installing a new plugin version. After updating, open the rules screen, confirm the stored rules, save once, and test a small product selection through the preview.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>The plugin does not contact external services, create public-facing cookies, or transmit product data. Rules, preview data, and undo data remain in the WordPress installation.<\/p>\n\n<h3>License<\/h3>\n\n<p>This program is free software; you can redistribute it and\/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the complete plugin folder to <code>\/wp-content\/plugins\/<\/code>, install the ZIP through <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>, or deploy the release through the WordPress.org plugin directory.<\/li>\n<li>Activate WooCommerce.<\/li>\n<li>Activate <strong>Keyword-Based Bulk Category Assignment for WooCommerce<\/strong>.<\/li>\n<li>Open <strong>WooCommerce &gt; Category Auto Rules<\/strong>.<\/li>\n<li>Create or review the rules before processing products.<\/li>\n<\/ol>\n\n<p>Updating from version 1.0 does not require deleting, deactivating, or recreating existing rules.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20an%20update%20from%20version%201.0%20delete%20my%20rules%3F\"><h3>Will an update from version 1.0 delete my rules?<\/h3><\/dt>\n<dd><p>No. Version 1.2.4 reads the same <code>keywbuca_category_rules<\/code> option and the same per-category rule values. It does not run the old cleanup routine during activation.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20change%20products%20as%20soon%20as%20a%20rule%20is%20saved%3F\"><h3>Does the plugin change products as soon as a rule is saved?<\/h3><\/dt>\n<dd><p>No. Rules run only when an authorized user selects products and starts the dedicated bulk action. The first step is a preview; products are changed only after the preview is confirmed.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20product%20already%20has%20a%20matching%20category%3F\"><h3>What happens when a product already has a matching category?<\/h3><\/dt>\n<dd><p>The preview lists only new assignments. Existing category relationships are left unchanged and are not counted as a new assignment.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20product%20matches%20multiple%20categories%3F\"><h3>What happens when a product matches multiple categories?<\/h3><\/dt>\n<dd><p>Every newly matching category is added to the product, provided its exclusion rule does not match.<\/p><\/dd>\n<dt id=\"are%20existing%20product%20categories%20removed%3F\"><h3>Are existing product categories removed?<\/h3><\/dt>\n<dd><p>No. Applying rules appends matching categories. It does not remove unrelated categories.<\/p><\/dd>\n<dt id=\"how%20does%20undo%20work%3F\"><h3>How does undo work?<\/h3><\/dt>\n<dd><p>After a successful run, the success notice offers <strong>Undo last run<\/strong>. Undo restores the complete category set recorded immediately before that user's most recent run. A later run replaces that user's previous undo record.<\/p><\/dd>\n<dt id=\"which%20product%20fields%20can%20be%20searched%3F\"><h3>Which product fields can be searched?<\/h3><\/dt>\n<dd><p>Title, short description, full description, SKU, and attribute names and values. The title is enabled by default for compatibility with earlier versions.<\/p><\/dd>\n<dt id=\"can%20rules%20be%20transferred%20between%20stores%3F\"><h3>Can rules be transferred between stores?<\/h3><\/dt>\n<dd><p>Yes, using JSON export and import. Because rules use category term IDs, verify that the destination categories use the intended IDs.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20the%20plugin%20erase%20saved%20rules%3F\"><h3>Does uninstalling the plugin erase saved rules?<\/h3><\/dt>\n<dd><p>No. The plugin deliberately leaves its configuration in the WordPress database so an accidental removal does not destroy a rule set.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.4<\/h4>\n\n<ul>\n<li>Preserved the original <code>keywbuca_category_rules<\/code> option, rule keys, comma-separated OR blocks, and <code>\"AND\"<\/code> group syntax.<\/li>\n<li>Preserved title-only matching as the upgrade default.<\/li>\n<li>Added explicit WordPress 7.1 and WooCommerce 11.0 compatibility metadata.<\/li>\n<li>Added save controls directly above and below the rules table.<\/li>\n<li>Added a clearer, responsive rules interface with category search, configured-only filtering, rule counts, hierarchy indentation, and unsaved-change status.<\/li>\n<li>Prevented unconfirmed chip-editor text from being lost when the form is saved.<\/li>\n<li>Added accessible chip removal controls and improved keyboard behavior.<\/li>\n<li>Added global matching-field selection for titles, descriptions, SKUs, and product attributes.<\/li>\n<li>Added safe previews with exact match reasons before product changes are committed.<\/li>\n<li>Limited previews to the administrator who created them and strengthened transient identifiers.<\/li>\n<li>Added per-user one-click undo while retaining compatibility with an existing legacy undo log.<\/li>\n<li>Added legacy-compatible JSON export, stricter JSON import validation, and a restorable pre-import backup.<\/li>\n<li>Improved custom and taxonomy attribute matching.<\/li>\n<li>Avoided fatal errors on PHP installations without the optional mbstring extension.<\/li>\n<li>Reduced category-query overhead by loading and rendering the hierarchy in one pass.<\/li>\n<li>Updated and expanded installation, usage, compatibility, privacy, import\/export, and FAQ documentation.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial release with title-based Contains and Not contains rules, comma-separated OR blocks, <code>\"AND\"<\/code> groups, bulk application, and JSON import\/export.<\/li>\n<\/ul>","raw_excerpt":"Assign WooCommerce product categories to selected products using reusable keyword rules, a safe preview, and one-click undo.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/242992","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=242992"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/fradigital"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=242992"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=242992"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=242992"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=242992"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=242992"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=242992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}