{"id":54971,"date":"2017-03-14T07:46:08","date_gmt":"2017-03-14T07:46:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/ajaxified-cart-woocommerce\/"},"modified":"2025-11-11T04:47:51","modified_gmt":"2025-11-11T04:47:51","slug":"ajaxified-cart-woocommerce","status":"publish","type":"plugin","link":"https:\/\/es.wordpress.org\/plugins\/ajaxified-cart-woocommerce\/","author":10038395,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.0.2","stable_tag":"2.0.2","tested":"6.8.5","requires":"5.8","requires_php":"8.0","requires_plugins":null,"header_name":"Ajaxified Cart","header_author":"Abhishek Kumar","header_description":"","assets_banners_color":"379bfe","last_updated":"2025-11-11 04:47:51","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/github.com\/abhishekfdd","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/ajaxified-cart-woocommerce\/","header_author_uri":"http:\/\/github.com\/abhishekfdd\/","rating":4.8,"author_block_rating":0,"active_installs":400,"downloads":8451,"num_ratings":13,"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":"abhishekfdd","date":"2025-10-30 21:20:53"},"2.0.0":{"tag":"2.0.0","author":"abhishekfdd","date":"2025-10-30 21:05:21"},"2.0.2":{"tag":"2.0.2","author":"abhishekfdd","date":"2025-11-11 04:47:51"}},"upgrade_notice":{"2.0.0":"<p>Major release with build migration, accessibility improvements, security hardening, and block theme support. Please update.<\/p>"},"ratings":{"1":0,"2":0,"3":1,"4":0,"5":12},"assets_icons":{"icon-128x128.jpg":{"filename":"icon-128x128.jpg","revision":1616858,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.jpg":{"filename":"icon-256x256.jpg","revision":1616858,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":1616858,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.2.2","2.0.0","2.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Variable product modal on block-based archive","2":"AJAX add-to-cart on single product page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[3175,221,213218,3047,286],"plugin_category":[45,59],"plugin_contributors":[88103],"plugin_business_model":[],"class_list":["post-54971","plugin","type-plugin","status-publish","hentry","plugin_tags-add-to-cart","plugin_tags-ajax","plugin_tags-block-themes","plugin_tags-cart","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-utilities-and-tools","plugin_contributors-abhishekfdd","plugin_committers-abhishekfdd"],"banners":{"banner":"https:\/\/ps.w.org\/ajaxified-cart-woocommerce\/assets\/banner-772x250.jpg?rev=1616858","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ajaxified-cart-woocommerce\/assets\/icon-128x128.jpg?rev=1616858","icon_2x":"https:\/\/ps.w.org\/ajaxified-cart-woocommerce\/assets\/icon-256x256.jpg?rev=1616858","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WooCommerce core does not provide AJAX add-to-cart on the single product page or for variable products listed on archive pages (it redirects to the single view). This plugin adds an unobtrusive AJAX workflow for:<\/p>\n\n<ul>\n<li>Simple products (single product page button becomes AJAX)<\/li>\n<li>Variable products on archive &amp; block-based Product Collection (opens an accessible modal to choose attributes, then adds via AJAX)<\/li>\n<li>Classic themes and modern block\/FSE themes (2025 and later) with Product Collection blocks<\/li>\n<\/ul>\n\n<p>Highlights:\n* Works with WooCommerce fragments (mini-cart updates automatically)\n* Accessible modal (focus trap, ESC to close, restore focus)\n* Nonce-secured AJAX endpoints; sanitized and validated input\n* Settings page to enable\/disable variable product archive functionality\n* Block theme compatibility (intercepts \"Select options\" buttons) with slug\/product_id fallback\n* Performance-minded (loads minified bundles built via Webpack; falls back to source if missing)\n* Translations auto-loaded from WordPress.org (no manual POT\/PO generation required)<\/p>\n\n<p>Privacy: This plugin does not send any data to external services. It only uses WooCommerce cart\/session APIs.<\/p>\n\n<h3>Development<\/h3>\n\n<p>Build commands:<\/p>\n\n<ol>\n<li>Install dependencies:\nnpm install<\/li>\n<li>Production build (minified + source maps):\nnpm run build<\/li>\n<li>Watch during development:\nnpm run watch<\/li>\n<li>Lint JS:\nnpm run lint<\/li>\n<\/ol>\n\n<p>Translations: WordPress.org language packs auto-load this plugin's strings. The former POT\/PO\/MO tooling and i18n loader file were removed (WP 4.6+). Do not add a load_plugin_textdomain() call; simply keep the Text Domain header accurate.<\/p>\n\n<p>WooCommerce is a registered trademark of Automattic Inc. This plugin is not affiliated with or endorsed by Automattic\/WooCommerce.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>ajaxified-cart-woocommerce<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate the plugin through the \"Plugins\" menu in WordPress.<\/li>\n<li>(Optional) Visit Settings &gt; General &gt; Ajaxified Cart to enable variable product archive AJAX.<\/li>\n<li>(Developers) Build assets if modifying JS: <code>npm install &amp;&amp; npm run build<\/code>.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='does%20it%20work%20with%20block%20%2F%20fse%20themes%20like%20twenty%20twenty-five%3F'><h3>Does it work with block \/ FSE themes like Twenty Twenty-Five?<\/h3><\/dt>\n<dd><p>Yes. Variable product \"Select options\" buttons in Product Collection blocks are intercepted, opening a modal for attributes.<\/p><\/dd>\n<dt id='how%20do%20i%20enable%20ajax%20for%20variable%20products%20on%20archive%20pages%3F'><h3>How do I enable AJAX for variable products on archive pages?<\/h3><\/dt>\n<dd><p>Go to Settings &gt; General &gt; Ajaxified Cart and check \"Enable ajaxified cart for variable products on archive page\".<\/p><\/dd>\n<dt id='can%20i%20customize%20the%20modal%20styling%3F'><h3>Can I customize the modal styling?<\/h3><\/dt>\n<dd><p>Yes. Override or enqueue your own CSS after <code>abwc-modal<\/code> or copy the CSS file and adjust.<\/p><\/dd>\n<dt id='will%20this%20conflict%20with%20caching%20or%20optimization%20plugins%3F'><h3>Will this conflict with caching or optimization plugins?<\/h3><\/dt>\n<dd><p>Typically no. Ensure the localized nonce is not stripped and that minification does not remove required data attributes.<\/p><\/dd>\n<dt id='does%20it%20support%20multi-site%3F'><h3>Does it support multi-site?<\/h3><\/dt>\n<dd><p>Yes, it works on multi-site installations.<\/p><\/dd>\n<dt id='how%20are%20translations%20handled%3F'><h3>How are translations handled?<\/h3><\/dt>\n<dd><p>They are served automatically from WordPress.org language packs; no manual tools or bundled .mo files are needed.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Fix: Prefixed bootstrap variable for URL to satisfy WPCS global prefix rule.<\/li>\n<li>Tweak: Shorter plugin header\/tagline (&lt;150 chars) for WordPress.org guidelines.<\/li>\n<li>Security: Refinement of variation attribute sanitization (removed phpcs ignore, explicit key\/value cleanup).<\/li>\n<li>Cleanup: Removed unused POT tooling file and generator script; relies on WP.org language packs.<\/li>\n<li>Cleanup: Removed uninstall references\/documentation.<\/li>\n<\/ul>\n\n<p><h4>2.0.1<\/h4><\/p>\n\n<ul>\n<li>Security: Strengthened sanitization for quantity, variation data, product slug, and variation_id validation.<\/li>\n<li>Added Requires Plugins header for explicit WooCommerce dependency.<\/li>\n<li>Escaped output of hidden AJAX input via wp_kses.<\/li>\n<li>Removed legacy translation loader &amp; uninstall cleanup code; simplified README.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Build migration: moved from Grunt to Webpack (minified bundles + source fallback).<\/li>\n<li>Performance &amp; code structure improvements.<\/li>\n<li>Compatibility updates: Tested up to WordPress 6.8.3 and recent WooCommerce versions.<\/li>\n<li>Block theme support: Product Collection block variable products open an AJAX modal.<\/li>\n<li>Security: Added nonce verification + full sanitization for all AJAX inputs.<\/li>\n<li>Accessibility: Focus trap, ESC close, refresh link, restored focus to triggering button, improved modal semantics.<\/li>\n<li>Internationalization: Auto-load via WordPress.org (removed manual textdomain loader &amp; POT tooling).<\/li>\n<li>Styling: Introduced dedicated modal stylesheet (abwc-modal.css).<\/li>\n<li>Compliance: ABSPATH guards across files, WPCS docblock adjustments, sanitized settings.<\/li>\n<li>Fallback logic: Ensures dist minified JS used when available, source files otherwise.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Code Refactor for performance<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Single Product page AJAX fix<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Cart Display fix<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Added admin settings page for enabling\/disabling ajaxified cart for variable products on shop page.<\/li>\n<li>Now ajaxified cart is working for variable products on shop page.<\/li>\n<li>Notices fixed on product single page.<\/li>\n<\/ul>\n\n<h4>1.2.1<\/h4>\n\n<ul>\n<li>Fatal error fix<\/li>\n<\/ul>\n\n<h4>1.2.2<\/h4>\n\n<ul>\n<li>Simple products archive ajax add to cart when variable product archive ajax option is enabled issue fix.<\/li>\n<li>Fixed 500 error when trying to add more variation products to cart than stock holds.<\/li>\n<\/ul>","raw_excerpt":"AJAX add-to-cart for WooCommerce: simple &amp; variable products on archives\/blocks via accessible modal and instant cart refresh.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/54971","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=54971"}],"author":[{"embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abhishekfdd"}],"wp:attachment":[{"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=54971"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=54971"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=54971"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=54971"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=54971"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=54971"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}