The External Product module keeps a normal FluentCart catalog listing and product page while sending the purchase click to another website. The title, media, description, archive card, and local product page all stay in Fluent Cart. Only the purchase destination changes.
This is the module for affiliate products, marketplace listings, external booking systems, and products fulfilled by another storefront. I built it for Amazon-linked products: the catalog stays on your site, the buy button goes to Amazon, and nothing can accidentally create a local order. It shipped in GT Extensions 2.2.0.
Requirements
- GT Extensions for FluentCart 2.2.0 or newer
- Fluent Cart 1.5.5 or newer, installed separately
Enabling the Module
- Go to Fluent Cart > GT Extensions.
- Toggle on External Product and save.
- Open a product in Fluent Cart.
- Choose External Product from the product navigation menu.
- Enable external purchase, enter the destination URL, and configure the button.
- Click Save External Product.
The module toggle lives on the GT Extensions settings page, but the actual destination settings are per product. Every product decides for itself whether it sells locally or externally.
Per-Product Settings
- External purchase: The per-product on/off switch. Off means the product checks out locally as usual.
- External URL: The destination. A complete
http://orhttps://URL is required while external purchase is enabled. - Button text: The call-to-action label. Default:
View Product. - Open link: In the same tab or a new tab. New-tab links always include
noopener noreferrer. - Search attributes: Add
nofollow(default: on) when the destination shouldn’t receive ranking credit, andsponsored(default: off, recommended for paid or affiliate links). - Price display: Hide the FluentCart price on product pages and product cards for this product only. Default: off.
Stored Data
Each product uses one private post-meta record: _gtfc_external_product. It holds a schema version plus the enabled state, URL, button text, target, nofollow, sponsored, and hide-price values. Because Fluent Cart copies product post meta on duplication, External Product settings travel with duplicated products automatically.
Storefront Behavior
When a product is configured as external, the module replaces every local purchase path:
- Product cards get a direct external link after the price block
- Single-product pricing sections get the same external link
- Standalone Add to Cart and Buy Now blocks are resolved through a bounded, read-only REST endpoint (
GET /external-products/resolve, at most 50 product IDs and 50 variation IDs per request) - Dynamically loaded product cards are handled with a DOM observer
- With price hiding on, FluentCart prices disappear for that product only
- Local quantity, sold-count, urgency, and purchase controls are suppressed for the external product
The rendered button carries the gtfc-external-product-button class with a card or single modifier, so styling it to match your theme takes one selector.
Purchase Safety

Swapping buttons in the browser isn’t enough. Someone can hold an old instant-checkout link, or an external product can sit in a stale cart. The module guards all of it on the server:
- Legacy Instant Checkout and Modal Checkout URLs redirect to the external destination before Fluent Cart creates a cart
fluent_cart/cart/can_purchaserejects direct add-to-cart attemptsfluent_cart/checkout/validate_before_processrejects an external item found in a stale cart
The result: no local order can exist for a product assigned to an external destination. The public resolver endpoint returns settings only for published, enabled products with a valid URL, so drafts and disabled configurations leak nothing.
Developer Hook
The module fires one action, gt_extensions_fluentcart/external_product_redirect, immediately before a legacy instant-checkout or modal-checkout request redirects. Use it to log outbound clicks or fire analytics:
add_action( 'gt_extensions_fluentcart/external_product_redirect', function( $url, $product_id, $variation_id ) {
// Track the outbound click before the redirect happens
}, 10, 3 );Quick answers to common questions:
Does an external product create a FluentCart order?
No. The call-to-action opens the configured external URL, and direct cart, instant-checkout, and stale-cart attempts are all blocked server-side before Fluent Cart can create a local order. The sale, payment, and fulfillment happen entirely on the destination site.
Should I enable nofollow and sponsored for affiliate links?
Yes to both. Nofollow is already the default, and sponsored is the attribute Google asks for on paid and affiliate placements. New-tab links also carry noopener noreferrer automatically, so the outbound link is safe and compliant out of the box.