{"id":361958,"date":"2026-09-24T03:33:13","date_gmt":"2026-09-24T03:33:13","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/no-shipping-no-checkout-for-woocommerce\/"},"modified":"2026-09-24T04:11:45","modified_gmt":"2026-09-24T04:11:45","slug":"ccms-no-rate-checkout-block-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ccms-no-rate-checkout-block-for-woocommerce\/","author":17117220,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.3.0","stable_tag":"1.3.0","tested":"7.1.2","requires":"5.6","requires_php":"7.2","requires_plugins":null,"header_name":"CCMS No-Rate Checkout Block for WooCommerce","header_author":"Complete Content Management Services","header_description":"Blocks checkout whenever the cart needs shipping but no shipping rate is available for the customer's address. Payment methods are hidden and the Place Order button is replaced with a notice. Rate-source agnostic \u2014 works with any shipping method (live rates, table rates, flat rate, etc.).","assets_banners_color":"29272e","last_updated":"2026-09-24 04:11:45","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.ccmssolutions.com\/","header_plugin_uri":"https:\/\/www.ccmssolutions.com\/plugins\/ccms-no-rate-checkout-block\/","header_author_uri":"https:\/\/www.ccmssolutions.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":38,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.3.0":{"tag":"1.3.0","author":"ccmshightech","date":"2026-09-24 04:11:45","revision":3710458}},"upgrade_notice":{"1.3.0":"<p>New dedicated setup page with tabbed interface, live status checklist, and translation-ready POT template. Tested up to WordPress 7.1 and WooCommerce 11.0.<\/p>","1.0.2":"<p>Recommended for all users: fixes a checkout lock-out and keeps the checkout form visible while a no-shipping address is blocked.<\/p>"},"ratings":[],"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710423,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3710423,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3710423,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.3.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3710423,"resolution":"1","location":"assets","locale":"","width":2352,"height":1828},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3710423,"resolution":"2","location":"assets","locale":"","width":2352,"height":1218},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3710423,"resolution":"3","location":"assets","locale":"","width":2352,"height":1178},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3710423,"resolution":"4","location":"assets","locale":"","width":2352,"height":1188},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3710423,"resolution":"5","location":"assets","locale":"","width":2550,"height":1622}},"screenshots":{"1":"Settings tab \u2014 enable\/disable the checkout block, customize the message, and a live status checklist confirming WooCommerce is active, the block is on, and shipping methods are configured.","2":"FAQ tab \u2014 six common questions answered in an accordion layout right inside the plugin.","3":"Help &amp; Support tab \u2014 troubleshooting guidance, developer filter examples, and quick links to documentation and CCMS support.","4":"About CCMS tab \u2014 company information and an optional newsletter sign-up.","5":"Blocked checkout \u2014 the customer's address has no shipping rate, so payment methods are removed and the block message is shown while the address form stays editable."}},"plugin_section":[],"plugin_tags":[3148,282388,3546,282387,286],"plugin_category":[45],"plugin_contributors":[282389],"plugin_business_model":[],"class_list":["post-361958","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-restrict-checkout","plugin_tags-shipping","plugin_tags-shipping-restrictions","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-ccmshightech","plugin_committers-ccmshightech"],"banners":{"banner":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/banner-772x250.png?rev=3710423","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/icon.svg?rev=3710423","icon":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/icon.svg?rev=3710423","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/screenshot-1.png?rev=3710423","caption":"Settings tab \u2014 enable\/disable the checkout block, customize the message, and a live status checklist confirming WooCommerce is active, the block is on, and shipping methods are configured."},{"src":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/screenshot-2.png?rev=3710423","caption":"FAQ tab \u2014 six common questions answered in an accordion layout right inside the plugin."},{"src":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/screenshot-3.png?rev=3710423","caption":"Help &amp; Support tab \u2014 troubleshooting guidance, developer filter examples, and quick links to documentation and CCMS support."},{"src":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/screenshot-4.png?rev=3710423","caption":"About CCMS tab \u2014 company information and an optional newsletter sign-up."},{"src":"https:\/\/ps.w.org\/ccms-no-rate-checkout-block-for-woocommerce\/assets\/screenshot-5.png?rev=3710423","caption":"Blocked checkout \u2014 the customer's address has no shipping rate, so payment methods are removed and the block message is shown while the address form stays editable."}],"raw_content":"<!--section=description-->\n<p><strong>CCMS No-Rate Checkout Block for WooCommerce<\/strong> stops customers from placing an order when their address has no available shipping option. Developed by <strong>Complete Content Management Services\u2122<\/strong> (https:\/\/www.ccmssolutions.com\/).<\/p>\n\n<p>The moment WooCommerce calculates shipping for a customer's address and returns <strong>zero shipping rates<\/strong>, this plugin:<\/p>\n\n<ul>\n<li>Hides all payment methods (the card fields disappear entirely).<\/li>\n<li>Replaces the <strong>Place Order<\/strong> button with a clear message, so there is nothing to click.<\/li>\n<li>Shows the block message inside the order review \u2014 <strong>without hiding the checkout form<\/strong>, so the customer can simply correct their address.<\/li>\n<li>Hard-blocks the order on submission as a safety net, on both the classic <strong>and<\/strong> the block-based (Store API) checkout.<\/li>\n<\/ul>\n\n<p><strong>Rate-source agnostic.<\/strong> The plugin never decides which locations are restricted. That is controlled entirely by your shipping methods \u2014 table rates, live carrier rates, flat-rate zones, or anything else. If your shipping setup returns no rate for an address, checkout is blocked; if it returns a rate, checkout proceeds normally. This keeps the plugin generic: it works with any shipping method that can decline to offer a rate.<\/p>\n\n<h4>Typical use cases<\/h4>\n\n<ul>\n<li>Geo-restricted products where certain states or regions must not be shipped to (configure the exclusion in your shipping method; this plugin enforces the checkout block).<\/li>\n<li>Weight, dimension, or order-value limits that make some carts unshippable to some destinations.<\/li>\n<li>Any scenario where \"no rate available\" should mean \"cannot check out.\"<\/li>\n<\/ul>\n\n<h4>Features<\/h4>\n\n<ul>\n<li>Works with the classic (shortcode) checkout and the block-based Cart &amp; Checkout.<\/li>\n<li>Only blocks after the customer has entered a destination \u2014 it never blocks an empty or unknown address, and never traps the customer on a page they cannot recover from.<\/li>\n<li>Ignores carts that do not need shipping (for example, all-virtual orders).<\/li>\n<li>Customizable block message under <strong>WooCommerce \u2192 CCMS No-Rate Checkout Block<\/strong>.<\/li>\n<li>Simple on\/off toggle.<\/li>\n<li>Developer filters: <code>nsnc_should_block_checkout<\/code>, <code>nsnc_block_message<\/code>, <code>nsnc_is_enabled<\/code>.<\/li>\n<li>HPOS (High-Performance Order Storage) and Cart\/Checkout Blocks compatible.<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin is fully functional without contacting any external service. It connects to one external service, and only when you explicitly choose to use it:<\/p>\n\n<p><strong>CCMS newsletter opt-in (optional).<\/strong> The plugin includes an optional newsletter sign-up on the <strong>WooCommerce \u2192 CCMS No-Rate Checkout Block \u2192 About CCMS<\/strong> screen. Nothing is sent unless a logged-in administrator types an email address, ticks the consent checkbox, and clicks <strong>Subscribe<\/strong>. When (and only when) that happens, the plugin sends the following to CCMS to record the subscription:<\/p>\n\n<ul>\n<li>the email address you entered;<\/li>\n<li>a consent flag indicating you agreed to receive email;<\/li>\n<li>a fixed source label (<code>ccms-no-rate-checkout-block-for-woocommerce<\/code>); and<\/li>\n<li>your site's address (the result of <code>home_url()<\/code>), so CCMS can associate the request with your site.<\/li>\n<\/ul>\n\n<p>The data is sent to Complete Content Management Services (CCMS) at <code>https:\/\/www.ccmssolutions.com\/api\/newsletter-subscribe.php<\/code>. No data is sent at any other time, and no checkout, order, or customer data is ever transmitted.<\/p>\n\n<p>Service provider: Complete Content Management Services \u2014 https:\/\/www.ccmssolutions.com\/\nTerms of service: https:\/\/www.ccmssolutions.com\/terms\/\nPrivacy policy: https:\/\/www.ccmssolutions.com\/privacy-policy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin ZIP via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>, or copy the folder to <code>wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>CCMS No-Rate Checkout Block for WooCommerce<\/strong>.<\/li>\n<li>(Optional) Edit the message under <strong>WooCommerce \u2192 CCMS No-Rate Checkout Block<\/strong>.<\/li>\n<li>Configure your shipping method(s) so that restricted destinations receive no rate. The plugin does the rest.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20decide%20which%20states%20or%20countries%20are%20blocked%3F\"><h3>Does this plugin decide which states or countries are blocked?<\/h3><\/dt>\n<dd><p>No. It only reacts to \"no shipping rate available.\" You define where you ship (and where you do not) in your shipping methods. This separation is intentional and is what makes the plugin generic.<\/p><\/dd>\n<dt id=\"will%20it%20block%20an%20order%20that%20only%20contains%20virtual%20or%20downloadable%20products%3F\"><h3>Will it block an order that only contains virtual or downloadable products?<\/h3><\/dt>\n<dd><p>No. If the cart does not need shipping, the plugin does nothing.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20woocommerce%20block%20checkout%3F\"><h3>Does it work with the WooCommerce block checkout?<\/h3><\/dt>\n<dd><p>Yes. Payment methods are removed and a server-side error prevents the order from being placed in both the classic and the block-based checkout.<\/p><\/dd>\n<dt id=\"will%20it%20ever%20trap%20a%20customer%20on%20a%20%22there%20are%20some%20issues%20with%20your%20cart%22%20page%3F\"><h3>Will it ever trap a customer on a \"there are some issues with your cart\" page?<\/h3><\/dt>\n<dd><p>No. The block is enforced by removing the payment methods and replacing the Place Order button while keeping the checkout form visible, so the customer can correct their address and continue.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>New: a dedicated <strong>Setup<\/strong> page under the WooCommerce menu with a professional, tabbed interface \u2014 Setup, FAQ, and Help &amp; Support \u2014 plus a live status checklist (WooCommerce active, block enabled, shipping methods configured).<\/li>\n<li>Change: activating the plugin now opens the guided Setup page instead of the raw settings form.<\/li>\n<li>New: a \"Setup\" link on the Plugins list row alongside \"Settings\".<\/li>\n<li>New: translation-ready \u2014 added a <code>languages\/no-shipping-no-checkout.pot<\/code> template covering all admin strings.<\/li>\n<li>Dev: admin styles and scripts are now enqueued from <code>assets\/<\/code> (no inline <code>&lt;style&gt;<\/code>\/<code>&lt;script&gt;<\/code>), and all placeholder strings carry translator comments.<\/li>\n<li>Tested up to WordPress 7.1 and WooCommerce 11.0.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>New: first-run onboarding \u2014 activating the plugin now opens the settings screen (single activations only).<\/li>\n<li>New: native contextual Help tabs (Overview, Setup, FAQ, Support) on the plugin's settings screens.<\/li>\n<li>New: a branded status\/diagnostics header on the settings page showing WooCommerce status, whether the block is enabled, and how many shipping methods are configured.<\/li>\n<li>New: Docs and Support links on the Plugins list row.<\/li>\n<li>New: uninstall cleanup removes the plugin's options on deletion (single site and multisite).<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>New: \"About CCMS\" tab under WooCommerce -&gt; Settings -&gt; Shipping, with an entirely optional, consent-based newsletter opt-in (no data leaves your site unless you enter an email, tick consent, and click Subscribe). A one-time, dismissible welcome notice links to it. No functionality is gated - the plugin is fully functional without any of this.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix: resolved a checkout lock-out where the checkout form could be hidden behind the \"there are some issues with the items in your cart\" template and never recover. The block no longer adds an error notice on the <code>woocommerce_check_cart_items<\/code> hook. It is enforced by removing payment methods, replacing the Place Order button, and validating on submit \u2014 all of which keep the checkout form visible. The block message now renders inside the order review.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: prevented a false block on checkout page load. When a customer returned to checkout with a previously-calculated address in the session, checkout could show \"there are some issues with the items in your cart\" even though shipping was available. An empty shipping-package set (shipping not yet recalculated for the request) is no longer treated as \"no shipping options\".<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Block WooCommerce checkout whenever the cart needs shipping but no shipping rate is available for the customer&#039;s address.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/361958","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=361958"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ccmshightech"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=361958"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=361958"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=361958"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=361958"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=361958"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=361958"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}