{"id":379789,"date":"2026-10-08T17:00:49","date_gmt":"2026-10-08T17:00:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rotozoom-woo-conditions\/"},"modified":"2026-10-08T17:00:37","modified_gmt":"2026-10-08T17:00:37","slug":"rotozoom-woo-conditions","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/rotozoom-woo-conditions\/","author":23534051,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.2","stable_tag":"1.2.2","tested":"7.1.3","requires":"6.0","requires_php":"8.0","requires_plugins":null,"header_name":"Rotozoom Woo Conditions","header_author":"Rotozoom","header_description":"Conditionally show or hide WooCommerce shipping and payment methods based on cart, customer, billing and shipping rules.","assets_banners_color":"3d308a","last_updated":"2026-10-08 17:00:37","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/rotozoom.com\/plugins\/conditions","header_author_uri":"https:\/\/rotozoom.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":97,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.2.2":{"tag":"1.2.2","author":"rotozoom","date":"2026-10-08 17:00:37","revision":3735198}},"upgrade_notice":{"1.2.1":"<p>Currency handling of rule thresholds and fees made safe for multi-currency stores.<\/p>","1.2.0":"<p>Rule limits removed \u2014 every feature is now free.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3735196,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3735196,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3735196,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3735196,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3735196,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3735199,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=rotozoom-woo-conditions&tab=shipping\",\"login\":true,\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"phpExtensionBundles\":[\"kitchen-sink\"],\"features\":{\"networking\":true},\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"woocommerce\"},\"options\":{\"activate\":true}},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"rotozoom-woo-conditions\"},\"options\":{\"activate\":true}},{\"step\":\"installTheme\",\"themeData\":{\"resource\":\"wordpress.org\\\/themes\",\"slug\":\"storefront\"},\"options\":{\"activate\":true}},{\"step\":\"setSiteOptions\",\"options\":{\"blogname\":\"Rotozoom Demo Store\",\"blogdescription\":\"Live preview \\u2014 Rotozoom Woo Conditions\",\"permalink_structure\":\"\\\/%postname%\\\/\",\"woocommerce_currency\":\"EUR\",\"woocommerce_default_country\":\"DE\",\"woocommerce_onboarding_profile\":{\"skipped\":true},\"woocommerce_task_list_hidden\":\"yes\",\"woocommerce_coming_soon\":\"no\",\"woocommerce_store_pages_only\":\"no\",\"woocommerce_allow_tracking\":\"no\",\"woocommerce_calc_taxes\":\"no\"}},{\"step\":\"importWxr\",\"file\":{\"resource\":\"vfs\",\"path\":\"\\\/wordpress\\\/wp-content\\\/plugins\\\/woocommerce\\\/sample-data\\\/sample_products.xml\"}},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\n\\\/\\\/ WooCommerce's first-run wizard would hijack the landing page.\\ndelete_transient( '_wc_activation_redirect' );\\nupdate_option( 'woocommerce_admin_notices', array() );\\nif ( class_exists( 'WC_Install' ) ) {\\n\\tWC_Install::create_pages();\\n}\\nupdate_option( 'woocommerce_coming_soon', 'no' );\\n\\n\\\/\\\/ Two payment methods to switch on and off: cash on delivery and bank transfer.\\nupdate_option( 'woocommerce_cod_settings', array( 'enabled' => 'yes', 'title' => 'Cash on delivery', 'description' => 'Pay with cash upon delivery.', 'instructions' => '', 'enable_for_methods' => array(), 'enable_for_virtual' => 'yes' ) );\\nupdate_option( 'woocommerce_bacs_settings', array( 'enabled' => 'yes', 'title' => 'Direct bank transfer', 'description' => 'Pay by bank transfer.', 'instructions' => '' ) );\\n\\n\\\/\\\/ One zone for everywhere with two methods: a paid flat rate and free shipping.\\n$zone = new WC_Shipping_Zone( 0 );\\n$flat = $zone->add_shipping_method( 'flat_rate' );\\n$free = $zone->add_shipping_method( 'free_shipping' );\\nupdate_option( 'woocommerce_flat_rate_' . $flat . '_settings', array( 'title' => 'Standard delivery', 'tax_status' => 'none', 'cost' => '5' ) );\\nupdate_option( 'woocommerce_free_shipping_' . $free . '_settings', array( 'title' => 'Free delivery', 'requires' => '', 'min_amount' => '0' ) );\\nWC_Cache_Helper::get_transient_version( 'shipping', true );\\n\\n$rule = static function ( string $type, string $title, array $conditions, array $actions, array $message ) {\\n\\t$id = wp_insert_post( array( 'post_type' => $type, 'post_status' => 'publish', 'post_title' => $title ) );\\n\\tupdate_post_meta( $id, '_rzwc_operator', 'and' );\\n\\tupdate_post_meta( $id, '_rzwc_conditions', $conditions );\\n\\tupdate_post_meta( $id, '_rzwc_actions', $actions );\\n\\tupdate_post_meta( $id, '_rzwc_enabled', 'yes' );\\n\\tif ( $message && class_exists( 'RZWC_Notices' ) ) {\\n\\t\\tupdate_post_meta( $id, RZWC_Notices::META, RZWC_Notices::sanitize_config( $message ) );\\n\\t}\\n\\treturn $id;\\n};\\n\\n\\\/\\\/ Shipping: free delivery from 60 EUR \\u2014 and the cart says how far away it is.\\n$rule( 'rzwc_ship_rule', 'Free delivery from \\u20ac60',\\n\\tarray( array( 'type' => 'subtotal', 'operator' => 'gte', 'value' => '60' ) ),\\n\\tarray(\\n\\t\\tarray( 'type' => 'enable_methods',  'method_ids' => array( 'free_shipping:' . $free . '&' . $free ) ),\\n\\t\\tarray( 'type' => 'disable_methods', 'method_ids' => array( 'flat_rate:' . $flat . '&' . $flat ) ),\\n\\t),\\n\\tarray( 'enabled' => 1, 'surfaces' => array( 'cart', 'checkout' ), 'style' => 'inline',\\n\\t\\t'text_gap' => 'Add \\u20ac{shortfall} more and delivery is free.',\\n\\t\\t'text_met' => 'Your order ships free.' )\\n);\\n\\n\\\/\\\/ Payment: no cash on delivery for large orders.\\n$rule( 'rzwc_pay_rule', 'No cash on delivery above \\u20ac100',\\n\\tarray( array( 'type' => 'subtotal', 'operator' => 'gt', 'value' => '100' ) ),\\n\\tarray( array( 'type' => 'disable_methods', 'method_ids' => array( 'cod' ) ) ),\\n\\tarray( 'enabled' => 1, 'surfaces' => array( 'checkout' ), 'style' => 'inline',\\n\\t\\t'text_met' => 'Orders above \\u20ac100 are paid by bank transfer.' )\\n);\\n\\n\\\/\\\/ Payment: logged-in customers only for bank transfer (shows a customer condition).\\n$rule( 'rzwc_pay_rule', 'Bank transfer for registered customers',\\n\\tarray( array( 'type' => 'customer_auth', 'operator' => 'loggedout' ) ),\\n\\tarray( array( 'type' => 'disable_methods', 'method_ids' => array( 'bacs' ) ) ),\\n\\tarray()\\n);\\n\\nflush_rewrite_rules( false );\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.2.2"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3735196,"resolution":"1","location":"assets","locale":"","width":1280,"height":860},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3735196,"resolution":"2","location":"assets","locale":"","width":1280,"height":860},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3735196,"resolution":"3","location":"assets","locale":"","width":1280,"height":860},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3735196,"resolution":"4","location":"assets","locale":"","width":1280,"height":860},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3735196,"resolution":"5","location":"assets","locale":"","width":1280,"height":860}},"screenshots":{"1":"Payment rules \u2014 a sortable list; each rule can be switched on and off, duplicated or edited.","2":"Rule editor \u2014 combine one or more conditions with one or more actions (here: free delivery from \u20ac60).","3":"\"Tell the customer\" \u2014 choose where the rule announces itself (product page, cart, checkout) and how (in the page or as a popup).","4":"The block-based cart telling the shopper how far free delivery is.","5":"The block-based checkout over \u20ac100: free delivery applied, cash on delivery removed, and both rules explain themselves."}},"plugin_section":[],"plugin_tags":[254661,254660,131954,10822,286],"plugin_category":[45],"plugin_contributors":[285119],"plugin_business_model":[],"class_list":["post-379789","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout-rules","plugin_tags-conditional-checkout","plugin_tags-payment-methods","plugin_tags-shipping-methods","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-rotozoom","plugin_committers-rotozoom"],"banners":{"banner":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/banner-772x250.png?rev=3735196","banner_2x":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/banner-1544x500.png?rev=3735196","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/icon.svg?rev=3735196","icon":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/icon.svg?rev=3735196","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/screenshot-1.png?rev=3735196","caption":"Payment rules \u2014 a sortable list; each rule can be switched on and off, duplicated or edited."},{"src":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/screenshot-2.png?rev=3735196","caption":"Rule editor \u2014 combine one or more conditions with one or more actions (here: free delivery from \u20ac60)."},{"src":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/screenshot-3.png?rev=3735196","caption":"\"Tell the customer\" \u2014 choose where the rule announces itself (product page, cart, checkout) and how (in the page or as a popup)."},{"src":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/screenshot-4.png?rev=3735196","caption":"The block-based cart telling the shopper how far free delivery is."},{"src":"https:\/\/ps.w.org\/rotozoom-woo-conditions\/assets\/screenshot-5.png?rev=3735196","caption":"The block-based checkout over \u20ac100: free delivery applied, cash on delivery removed, and both rules explain themselves."}],"raw_content":"<!--section=description-->\n<p>Rotozoom Conditions lets you control which WooCommerce <strong>payment<\/strong> and <strong>shipping<\/strong> methods are available at checkout, based on flexible rules. Hide Cash on Delivery for certain countries, disable a courier above a weight limit, add a fee for specific payment methods, or show a custom notice \u2014 all without code.<\/p>\n\n<p><strong>Completely free.<\/strong> Unlimited payment and shipping rules, every condition and every action \u2014 there is no paid version and no rule limit.<\/p>\n\n<p>Each rule combines one or more conditions (with AND\/OR logic) with one or more actions. Rules are evaluated live during checkout, including AJAX checkout updates.<\/p>\n\n<p>A rule can also <strong>announce itself to the customer<\/strong>: show a notice on the product page, in the cart and at checkout \u2014 either \"you qualify\" when the rule is met, or an \"almost there\" progress message such as \"Add 2 more items for free shipping\", computed from the same rule the checkout enforces.<\/p>\n\n<h4>Conditions<\/h4>\n\n<ul>\n<li>Cart: subtotal, item count, coupon<\/li>\n<li>Products: products, categories, tags, shipping class, product types, stock status<\/li>\n<li>Billing: country, state, city, postcode, company, email, phone<\/li>\n<li>Shipping: country, state, city, postcode, company<\/li>\n<li>Customer: logged-in state, user role<\/li>\n<li>Payment rules: selected shipping method<\/li>\n<li>Shipping rules: weight, volume, total height \/ length \/ width<\/li>\n<\/ul>\n\n<h4>Actions<\/h4>\n\n<ul>\n<li>Payment: disable methods, enable only specific methods, add a fee, show a \"no methods\" message<\/li>\n<li>Shipping: disable methods, enable only specific methods, set a method title, show a notice<\/li>\n<\/ul>\n\n<h4>Customer notices<\/h4>\n\n<ul>\n<li>Per-rule notices on three surfaces: product page, cart and checkout \u2014 each with its own editable text<\/li>\n<li>Two footings: a \"condition met\" message, and a progress message with {shortfall}, {have}, {need}, {gaps} and {rule} placeholders<\/li>\n<li>Works in the block-based Cart and Checkout (WooCommerce Blocks \/ Store API) as well as classic shortcode pages<\/li>\n<li><code>[rotozoom_conditions_notice]<\/code> shortcode for page builders and block templates<\/li>\n<li>Inline or popup display style per rule (popups show once per session); <code>rzwc_notice_html<\/code> filter for full markup control<\/li>\n<li>Progress advice is only offered for conditions a shopper can actually act on (subtotal, item count, weight, dimensions) \u2014 a rule about billing country or a coupon stays silent instead of giving absurd advice<\/li>\n<\/ul>\n\n<h4>Highlights<\/h4>\n\n<ul>\n<li>Separate rule sets for payment and shipping methods<\/li>\n<li>Priority ordering with drag &amp; drop<\/li>\n<li>Works with WooCommerce High-Performance Order Storage (HPOS)<\/li>\n<li>Reads live checkout address fields during AJAX order review<\/li>\n<li>Translation-ready<\/li>\n<\/ul>\n\n<h4>More from Rotozoom<\/h4>\n\n<p>The rules list shows a small, closable \"More from Rotozoom\" box with links to our other WooCommerce plugins (shipping and couriers, B2B trade accounts, product filters, warranties). It appears only on this plugin's own screen, never on your storefront, loads nothing from the internet, and is gone for good once you close it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>None. This plugin does not connect to, send data to, or load any code from external services. It runs entirely on your own site. The \"More from Rotozoom\" box contains plain links to rotozoom.com; nothing is requested from that site unless you click one.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>, or install it through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and active.<\/li>\n<li>Open <strong>Rotozoom Conditions<\/strong> in the admin menu (or <strong>Rotozoom \u2192 Woo Conditions<\/strong> when another Rotozoom plugin is installed) and add your first payment or shipping rule.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20require%20woocommerce%3F\"><h3>Does it require WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. The plugin extends WooCommerce checkout and will show a notice if WooCommerce is not active.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20hpos%20%28high-performance%20order%20storage%29%3F\"><h3>Is it compatible with HPOS (High-Performance Order Storage)?<\/h3><\/dt>\n<dd><p>Yes. The plugin declares HPOS compatibility.<\/p><\/dd>\n<dt id=\"does%20it%20send%20any%20data%20to%20external%20servers%3F\"><h3>Does it send any data to external servers?<\/h3><\/dt>\n<dd><p>No. The plugin is fully self-contained and makes no external network requests.<\/p><\/dd>\n<dt id=\"is%20there%20a%20pro%20version%20or%20a%20rule%20limit%3F\"><h3>Is there a Pro version or a rule limit?<\/h3><\/dt>\n<dd><p>No. Every feature is included and you can create as many payment and shipping rules as you need.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20cart%20and%20checkout%20blocks%3F\"><h3>Does it work with the Cart and Checkout blocks?<\/h3><\/dt>\n<dd><p>Yes. Rules apply to both the block-based and the classic (shortcode) cart and checkout, and customer notices are shown in both.<\/p><\/dd>\n<dt id=\"how%20do%20i%20show%20the%20currency%20in%20a%20notice%3F\"><h3>How do I show the currency in a notice?<\/h3><\/dt>\n<dd><p>The placeholders {shortfall}, {have} and {need} are plain numbers, so the notice reads correctly in any currency and language. Write the symbol in the text yourself, for example \"Add \u20ac{shortfall} more and delivery is free.\"<\/p><\/dd>\n<dt id=\"the%20shortcode%20shows%20nothing%20on%20my%20landing%20page\"><h3>The shortcode shows nothing on my landing page<\/h3><\/dt>\n<dd><p>Outside the cart, checkout and product pages the shortcode cannot guess which notices to show. Name the surface: <code>[rotozoom_conditions_notice surface=\"cart\"]<\/code>.<\/p><\/dd>\n<dt id=\"in%20which%20order%20are%20rules%20applied%3F\"><h3>In which order are rules applied?<\/h3><\/dt>\n<dd><p>In the order of the list. Drag and drop the rows to change it.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Shortcode output is escaped at the return boundary.<\/li>\n<li>Translations for the WordPress.org version are loaded by WordPress from translate.wordpress.org.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fixed: rule amounts (order-value thresholds and fees) are converted only when the cart itself is in another currency, and then exactly once. A currency switcher that only shows reference prices no longer affects them.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The plugin is now completely free: unlimited payment and shipping rules, with no paid version and no rule limit.<\/li>\n<li>Removed the upgrade tab and the plan-limit notices.<\/li>\n<li>New: a small, closable \"More from Rotozoom\" box on the rules list.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Fixed a \"translation loading too early\" notice that WordPress 6.7+ logged on every request.<\/li>\n<li>Customer-notice markup is now escaped on output.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: a rule can announce itself to the customer \u2014 configurable notices on the product page, in the cart and at checkout.<\/li>\n<li>New: separate editable messages for \"condition met\" and \"almost there\" states, with placeholders such as {shortfall}, {have} and {need} (e.g. \"Add 2 more items for free shipping\").<\/li>\n<li>New: notices also render inside the block-based Cart and Checkout (WooCommerce Blocks \/ Store API).<\/li>\n<li>New: [rotozoom_conditions_notice] shortcode for page builders and block templates.<\/li>\n<li>New: inline or popup display style per rule, plus a rzwc_notice_html filter for full markup control.<\/li>\n<li>Updated German, French, Italian, Spanish and Portuguese translations.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Added German, French, Italian, Spanish and Portuguese translations.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Conditional payment and shipping method rules with 20+ conditions.<\/li>\n<li>Add-fee, disable\/enable methods, custom notices and titles.<\/li>\n<li>HPOS compatible; live AJAX checkout address evaluation.<\/li>\n<\/ul>","raw_excerpt":"Conditionally show or hide WooCommerce shipping and payment methods based on cart, customer, billing and shipping rules.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/379789","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=379789"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/rotozoom"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=379789"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=379789"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=379789"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=379789"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=379789"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=379789"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}