Logicfire Wishlist & Registry for WooCommerce
The best free WooCommerce wishlist and gift registry plugin. Let customers save products, create registries for weddings & baby showers, share lists, and buy from shared wishlists — with real-time purchase notifications.
What is this plugin?
Logicfire Wishlist & Registry for WooCommerce extends your store with a full-featured wishlist and gift registry system. Customers can save favorite products, create multiple wishlists, share them via link, email, or social media, and friends can purchase items directly from shared lists.
The plugin is lightweight, built with a modern Vue.js-powered UI, and fully compatible with WooCommerce HPOS, block themes, Gutenberg, and Elementor.
[Placeholder: Screenshot of the wishlist page showing the dashboard with multiple wishlists, items with heart icons, and sharing options]
Feature Highlights
- Multiple wishlists — Create and manage unlimited wishlists per user
- Guest wishlists — Non-logged-in users can save products via cookies
- Gift registries — Add event dates to convert wishlists into registries
- Sharing — Share via link, email, Facebook, Twitter, Pinterest
- Privacy controls — Public, private, or shared visibility per list
- Counter widgets — Heart icon with badge count in header/navigation
- Gutenberg blocks + Elementor widgets — Wishlist Button, Wishlist Counter, Registry Counter
- Email notifications — Purchase alerts, back-in-stock, wishlist shared
- REST API — Full API for wishlists, items, shares, and claims
- WooCommerce My Account — Integrated wishlists endpoint
Free vs Pro
| Feature | Free | Pro |
|---|---|---|
| Multiple wishlists & guest wishlists | ✅ | ✅ |
| Gift registries with event dates | ✅ | ✅ |
| Sharing (link, email, social) | ✅ | ✅ |
| Privacy controls & invite access | ✅ | ✅ |
| Counter widgets (Gutenberg + Elementor) | ✅ | ✅ |
| Email notifications | ✅ | ✅ |
| REST API | ✅ | ✅ |
| "I'll buy this" claims | — | ✅ |
| Ship to registry recipient | — | ✅ |
| Analytics dashboard | — | ✅ |
| Purchase/fulfillment tracking | — | ✅ |
| Show purchaser names on registry | — | ✅ |
| Claim expiry & notifications | — | ✅ |
Installation
Install the plugin in under 60 seconds using the WordPress admin or manual upload.
Installing the Free Plugin
Make sure WooCommerce is installed and activated.
Go to WP Admin → Plugins → Add New and search for Logicfire Wishlist. Click Install Now, then Activate.
Navigate to WooCommerce → Settings → Wishlist & Registry to configure.
Create a page and add the shortcode [lfwlr_wishlist_registry_page]. Then select this page under the Wishlist Page setting.
Installing Pro (Add-on)
The Pro add-on requires the free Logicfire Wishlist & Registry plugin to be active.
Go to Plugins → Add New → Upload Plugin. Upload the .zip file and activate.
Pro settings (Claims, Analytics) appear automatically under WooCommerce → Settings → Wishlist & Registry and the WooCommerce → Logicfire Analytics submenu.
If the free plugin is not active, the Pro add-on will display an admin notice and will not load any features.
Requirements
Minimum and recommended software versions.
| Software | Minimum | Tested up to |
|---|---|---|
| WordPress | 5.8 | 6.9 |
| PHP | 7.4 | 8.1+ |
| WooCommerce | 6.0 | 10.6.1 |
| WooCommerce HPOS | Optional but fully supported | |
The Pro plugin additionally requires the free Logicfire Wishlist & Registry for WooCommerce plugin (v2.1.0+) to be installed and activated.
General Settings
Core settings found under WooCommerce → Settings → Wishlist & Registry.
Enable/Disable
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Enable Wishlist & Registry | lfwlr_enabled | Checkbox | yes | Turn wishlist functionality on or off site-wide. |
| Enable Registry | lfwlr_enable_registry | Checkbox | no | Enable all registry functionality. When disabled, registry options and registry lists are hidden on the frontend. |
| Guest Wishlists | lfwlr_guest_enabled | Checkbox | yes | Allow non-logged-in visitors to save products via cookies. |
Button Positions
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Button Position (Product Cards) | lfwlr_heart_position | Select | topright | Where to display the wishlist heart button on product cards (shop, category, search). Options: topleft, topright. |
| Button Position (Single Product) | lfwlr_single_button_position | Select | before_add_to_cart | Where to display the wishlist button on single product pages. Options: before_add_to_cart, after_add_to_cart, after_summary, shortcode_only. |
| Compact Layout | lfwlr_compact_layout | Checkbox | no | Use a compact heart-only button on single product pages instead of the full banner. |
Counter Widget
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Wishlist Counter Menu Location | lfwlr_counter_menu_location | Select | primary | Inject a live wishlist counter (heart badge) into a navigation menu. The counter updates via AJAX. |
Wishlist Page
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Wishlist Page | lfwlr_page_id | Select (pages) | — | The page containing [lfwlr_wishlist_registry_page]. Used for "View Wishlist" links throughout the site. |
Cart & Purchase Behavior
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Remove on Add to Cart | lfwlr_remove_on_add_to_cart | Checkbox | no | Remove the product from the wishlist when the customer adds it to their cart. |
| Remove on Purchase | lfwlr_remove_on_purchase | Checkbox | yes | Remove the product from the customer's wishlists when their order is completed. |
Sharing Settings
Control how wishlists and registries can be shared.
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Enable Sharing | lfwlr_share_enabled | Checkbox | yes | Allow users to share their wishlists via link, email, and social media. |
| Share Email Sender Name | lfwlr_share_email_from_name | Text | Site title | The "From" name used when sharing wishlists via email. |
| Share Email Sender Address | lfwlr_share_email_from_address | Admin email | The "From" email used for share emails. |
When sharing is enabled, users can share via:
- Direct link — Copy a shareable URL
- Email — Send via the built-in email form
- Social media — Facebook, Twitter/X, Pinterest
Appearance Settings
Customize the look and feel of wishlist elements.
Colors
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Primary Color | lfwlr_primary_color | Color | #e8475f | Main color for buttons, hearts, and active states. |
| Hover Color | lfwlr_hover_color | Color | #d63a51 | Color for hover states on interactive elements. |
| Active Color | lfwlr_active_color | Color | #e8475f | Color for active/filled wishlist hearts. |
Style
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Icon Style | lfwlr_icon_style | Select | heart | Heart icon style. Options: heart, bookmark, star. |
| Border Radius | lfwlr_border_radius | Text | 12px | Corner radius for cards and panels. Any valid CSS value (e.g. 8px, 0, 1rem). |
Notification Settings
Email notifications sent to wishlist owners and users.
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Notify on Purchase | lfwlr_notify_purchased | Checkbox | yes | Email the wishlist owner when someone purchases an item from their list. Uses WooCommerce email templates (WooCommerce → Settings → Emails). |
| Back in Stock Alerts | lfwlr_notify_back_in_stock | Checkbox | yes | Email users when a wishlisted out-of-stock product becomes available again. |
| Notify on Claim | lfwlr_notify_claimed | Checkbox | yes | Email the wishlist owner when someone claims an item from their registry. Only visible when Pro is active. |
WooCommerce Email Classes
The plugin registers three email classes with WooCommerce (found under WooCommerce → Settings → Emails):
| Class | Trigger Hook | Description | |
|---|---|---|---|
| Item Purchased | LFWLR_Email_Item_Purchased | lfwlr_item_purchased | Sent to the wishlist owner when someone purchases an item from their list. |
| Back In Stock | LFWLR_Email_Back_In_Stock | woocommerce_product_set_stock_status | Sent to all users who have the product wishlisted when it comes back in stock. |
| Wishlist Shared | LFWLR_Email_Wishlist_Shared | Share email REST endpoint | Sent to the recipient when a user shares their wishlist via email. |
Advanced Settings
Shortcode reference and custom CSS.
Shortcodes Quick Reference
These shortcode references are shown in the admin settings for convenience:
| Shortcode | Purpose |
|---|---|
[lfwlr_wishlist_registry_page] | Full wishlist/registry dashboard page |
[lfwlr_wishlist_button product_id="123"] | Wishlist heart button for a specific product |
[lfwlr_wishlist_counter] | Wishlist counter badge with dropdown (icon + count) |
[lfwlr_registry_counter] | Registry counter badge with dropdown (icon + count) |
Custom CSS
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Custom CSS | lfwlr_custom_css | Textarea | empty | Add custom CSS to override LFWLR styles. Rendered in <style> on the frontend. |
Pro: Claim Expiry
| Setting | Option ID | Type | Default | Description |
|---|---|---|---|---|
| Claim Expiry (hours) | wishlist_registry_pro_claim_expiry_hours | Number | 48 | Hours before an uncompleted claim expires and the item becomes available again. Cleanup runs hourly via Action Scheduler (or WP-Cron fallback). |
Wishlists
Everything about creating, managing, and using wishlists.
Overview
Users can create multiple wishlists and add any WooCommerce product (including variable products with specific variations). A default wishlist is automatically created for each user on first interaction.
Creating Wishlists
Wishlists can be created from:
- The wishlist dashboard page (via the
[lfwlr_wishlist_registry_page]shortcode) - The My Account → Wishlists endpoint
- The REST API (
POST /lf-wlr-wc/v1/wishlists)
Wishlist Properties
| Property | Type | Description |
|---|---|---|
title | String | Display name of the wishlist |
visibility | String | public, shared, or private |
description | String | Optional description |
event_date | Date (Y-m-d) | When set, converts the wishlist into a registry |
is_default | Boolean | Whether this is the default list (one per type) |
slug | String | URL-friendly identifier for sharing |
Managing Items
Items are added via the heart button on product cards and single product pages. Each item stores:
- Product & Variation ID
- Quantity — Editable, especially useful for registries
- Priority — Sort order within the list
- Note — Optional personal note
- Quantity Fulfilled — Tracked by Pro purchase tracker
Guest Wishlists
When lfwlr_guest_enabled is set to yes, visitors without an account receive a guest token stored in a cookie. Guest wishlists are fully functional and can later be merged when the guest logs in or creates an account.
The guest token is passed to the REST API via the X-LFWLR-Guest-Token HTTP header.
Gift Registry
Create gift registries for weddings, baby showers, birthdays, and more.
Overview
A registry is a wishlist with an event_date. When the Enable Registry setting is active, users can create registries from the wishlist dashboard by adding an event date. Registries have their own default list separate from regular wishlists.
Registry-Specific Features
- Event date — Displayed on the shared registry page
- Quantity & fulfillment — Each item shows needed vs. fulfilled quantities
- Fulfillment progress — Visual progress bar on shared page (Pro)
- Claims — "I'll buy this" reservation system (Pro)
- Ship to recipient — Items ship to the registry owner (Pro)
Sharing Registries
Registries have their own URL format: /registry/{slug}/ (vs /wishlist/{slug}/ for regular wishlists). The shared registry page shows fulfillment progress and allows visitors to add items to their cart or claim items (Pro).
Sharing & Privacy
Control who can see and interact with wishlists.
Visibility Levels
| Visibility | Description |
|---|---|
public | Anyone with the link can view and purchase from the list |
shared | Only invited users (via token) can view the list |
private | Only the owner can see the list |
Sharing Methods
- Copy Link — Generates a shareable URL
- Email — Built-in email form via REST API (
POST /lf-wlr-wc/v1/share) - Social — One-click sharing to Facebook, Twitter/X, Pinterest
Invite-Based Sharing
For shared visibility lists, owners can create share invitations via the REST API (POST /lf-wlr-wc/v1/wishlists/{id}/shares). Each invite generates a unique token and can have an access level:
view— Can view items onlypurchase— Can view and add to cart
URL Structure
| Type | URL Pattern |
|---|---|
| Wishlist | /wishlist/{slug}/ |
| Registry | /registry/{slug}/ |
| With token | /wishlist/{slug}/?token={token} |
The plugin registers rewrite rules for /wishlist/ and /registry/ prefixes. If shared URLs return 404, flush permalinks via Settings → Permalinks → Save Changes.
Counter Widgets
Display a live wishlist counter (heart badge) in your site header.
Navigation Menu Counter
The easiest way to add a counter is via the Wishlist Counter Menu Location setting. Select a registered nav menu location and the plugin injects a heart icon with a badge count automatically.
Gutenberg Blocks
Two blocks are available in the WordPress block editor:
- Wishlist Counter — Displays a heart icon with the total item count
- Registry Counter — Displays a gift icon with the total registry item count
Elementor Widgets
Two Elementor widgets are available under the "Logicfire" category:
- Wishlist Counter — Same as the Gutenberg block, with Elementor styling controls
- Registry Counter — Same as above, for registry items
Shortcodes
Embed wishlist components anywhere using shortcodes.
Wishlist Dashboard Page
[lfwlr_wishlist_registry_page]
Renders the full wishlist and registry management dashboard. Place this on a dedicated page and select that page in the plugin settings.
Attributes: None
Wishlist Button
[lfwlr_wishlist_button product_id="123" style="auto" position="topright"]
Place a wishlist heart button for a specific product anywhere on your site.
| Attribute | Type | Default | Description |
|---|---|---|---|
product_id | Integer | Auto-detected | Product ID. Required when outside a product context. |
style | String | auto | auto (single on product page, loop elsewhere), single, or loop. |
position | String | From settings | topleft or topright — for loop style only. |
Wishlist Counter
[lfwlr_wishlist_counter icon="heart" show_label="no" label="Wishlist"]
Displays a wishlist counter widget with a badge showing the user's total wishlisted item count. Includes a dropdown preview of items and a link to the wishlist page. Ideal for headers, sidebars, or any widget area.
| Attribute | Type | Default | Description |
|---|---|---|---|
icon | String | heart | Icon to display. Options: heart, bookmark, star. |
show_label | String | no | Show a text label next to the icon. yes or no. |
label | String | Wishlist | Label text (only visible when show_label="yes"). |
Registry Counter
[lfwlr_registry_counter icon="gift" show_label="no" label="Registry"]
Displays a registry counter widget with a badge showing the user's total registry item count. Only renders when the Registry feature is enabled. Includes a dropdown preview and a link to the registry page.
| Attribute | Type | Default | Description |
|---|---|---|---|
icon | String | gift | Icon to display. Options: gift, heart, star. |
show_label | String | no | Show a text label next to the icon. yes or no. |
label | String | Registry | Label text (only visible when show_label="yes"). |
The [lfwlr_registry_counter] shortcode outputs nothing if the Registry feature is disabled (lfwlr_enable_registry = no).
Gutenberg Blocks
Native WordPress block editor integration.
Three blocks are available in the block editor under the "Logicfire" category:
Wishlist Button Block
Renders a wishlist heart button for a product. Configure the product ID in the block's sidebar settings.
Wishlist Counter Block
Displays a heart icon with a badge showing the user's total wishlisted item count. Ideal for header templates.
Registry Counter Block
Same as the Wishlist Counter, but counts items from registries (wishlists with event dates).
Elementor Widgets
Drag-and-drop wishlist widgets for Elementor.
Three widgets are available in Elementor under the "Logicfire" category:
- Wishlist Button — Heart toggle for a specific product
- Wishlist Counter — Heart badge with total item count
- Registry Counter — Gift badge with registry item count
Each widget supports Elementor's style controls for colors, typography, and spacing.
Claims — "I'll Buy This"
Prevent duplicate gifts by letting visitors reserve registry items before purchasing.
How It Works
- A visitor opens a shared registry page
- They click "I'll buy this" on an available item
- They enter their email, name, and desired quantity
- The item is reserved — other visitors see the remaining claimable quantity
- When the visitor purchases the item, the claim transitions to
purchased - If the visitor doesn't complete the purchase within the expiry period, the claim expires automatically
Claim Statuses
| Status | Description |
|---|---|
claimed | Visitor has reserved the item but hasn't purchased yet |
purchased | The claim was fulfilled (order completed/processing) |
| expired | Claim row is deleted when expiry runs (item becomes available again) |
Claim Expiry
Uncompleted claims expire after the configured number of hours (default: 48 hours). The cleanup runs hourly via Action Scheduler (preferred) or WP-Cron as fallback.
Configure via: WooCommerce → Settings → Wishlist & Registry → Claim Expiry (hours)
REST API
| Method | Endpoint | Description |
|---|---|---|
POST | /lf-wlr-wc/v1/claims | Create a new claim |
DELETE | /lf-wlr-wc/v1/claims/{id} | Cancel a claim |
Developer Hooks
| Hook | Type | Parameters | Description |
|---|---|---|---|
lfwlr_item_claimed | Action | $item_id, $email, $wishlist_id, $claim | Fires when an item is claimed |
lfwlr_claim_cancelled | Action | $claim_id, $claim | Fires when a claim is cancelled |
lfwlr_claim_expired | Action | $claim_id, $claim | Fires when a claim expires |
lfwlr_claim_purchased | Action | $claim_id, $order_id, $claim | Fires when a claim transitions to purchased |
Ship to Registry Recipient
Registry items automatically ship to the registry owner's address instead of the purchaser's.
How It Works
- A visitor adds a registry item to their cart from a shared registry page
- At checkout, the cart is split into packages: one for registry items (shipping to the registry owner) and one for the customer's own items
- A notice appears at checkout: "Registry items in your cart will ship to the registry recipient."
- The purchaser sees "Registry recipient" as the package name — the owner's actual address is masked
- In the admin order view, a prominent notice shows the registry recipient's address for fulfillment
Address Resolution
The registry owner's shipping address is resolved from WooCommerce customer meta (shipping address fields, falling back to billing address). The address is stored as order item meta (_wlrp_ships_to_registry) for admin reference.
Address Masking
Purchasers never see the registry owner's full address. The shipping package is labeled "Registry recipient" at checkout.
Analytics Dashboard
Insights into wishlist and registry activity.
Accessing Analytics
Navigate to WooCommerce → Logicfire Analytics in the WordPress admin. Requires the manage_woocommerce capability.
Available Statistics
| Metric | Description |
|---|---|
| Total Wishlists | Total number of wishlists (all types) |
| Total Items | Total items across all wishlists |
| Unique Users | Number of unique registered users with wishlists |
| Total Purchases | Items with purchased status |
| Active Claims | Items with claimed status |
| Top 10 Wishlisted Products | Most popular products by wishlist count, with product details |
| Recent Purchases | Last 10 fulfilled purchases with product and purchaser info |
Developer: Extend Analytics
add_filter( 'lfwlr_analytics_stats', function( $stats ) {
// Add custom metrics
$stats['my_custom_metric'] = calculate_something();
return $stats;
});
Purchase Tracking
Track fulfillment of wishlist and registry items through the order lifecycle.
How It Works
The purchase tracker monitors WooCommerce order status changes and updates wishlist item fulfillment:
- Order completed/processing — Increments
quantity_fulfilledfor matching items, transitions claims fromclaimed→purchased - Order cancelled/refunded — Reverts fulfilled quantities and transitions claims back to
claimed - Payment complete — Also triggers fulfillment if order status qualifies
Order Meta
The tracker stores data on order items and orders:
| Meta Key | On | Description |
|---|---|---|
_lfwlr_item_id | Order Item | Wishlist item ID being fulfilled |
_lfwlr_claim_id | Order Item | Claim ID if purchased via a claim |
_lfwlr_purchases_processed | Order | Flag to prevent double-processing |
_lfwlr_direct_fulfillments | Order | Array of item_id/quantity/claim_id for revert on cancellation |
Developer Hooks
| Hook | Type | Parameters | Description |
|---|---|---|---|
lfwlr_item_purchased | Action | $item_id, $order_id, $claim_id|null | Fires when a wishlist item is purchased |
lfwlr_item_fulfilled | Action | $item_id, $wishlist_id | Fires when an item's fulfilled quantity reaches its needed quantity |
lfwlr_claim_purchased | Action | $claim_id, $order_id, $claim | Fires when a claim transitions to purchased |
REST API
All endpoints use the namespace /wp-json/lf-wlr-wc/v1/. Authentication uses WordPress nonces or the X-LFWLR-Guest-Token header for guests.
Wishlists
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /wishlists | Yes | List user's wishlists. Query param: with_items=full|ids|count|none |
POST | /wishlists | Yes | Create wishlist. Body: title (required), visibility, description, event_date |
GET | /wishlists/{id} | Yes | Get a single wishlist |
PUT/PATCH | /wishlists/{id} | Yes | Update wishlist. Body: title, visibility, description, event_date, is_default |
DELETE | /wishlists/{id} | Yes | Delete a wishlist and all its items |
Items
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST | /wishlists/{id}/items | Yes | Toggle item (add/remove). Body: product_id, variation_id |
PUT/PATCH | /items/{id} | Yes | Update item. Body: quantity, priority, note |
DELETE | /items/{id} | Yes | Remove item from wishlist |
PUT/PATCH | /items/{id}/quantity | Yes | Update item quantity only |
Utility
| Method | Endpoint | Auth | Description |
|---|---|---|---|
GET | /status/{product_id} | Yes | Check if product is in any of user's wishlists |
GET | /count | Yes | Get total item count across all wishlists |
GET | /shared/{slug} | No | Get a shared wishlist by slug (public access) |
POST | /guest-token | No | Create a new guest token |
Sharing
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST | /share | Yes | Send share email. Body: wishlist_id, recipient_email, sender_name, message |
GET | /wishlists/{id}/shares | Yes | List share invitations for a wishlist |
POST | /wishlists/{id}/shares | Yes | Create share invitation. Body: email, access_level (view|purchase) |
DELETE | /shares/{id} | Yes | Revoke a share invitation |
Pro Endpoints
| Method | Endpoint | Auth | Description |
|---|---|---|---|
POST | /claims | No | Create claim. Body: item_id, wishlist_id, email, name, quantity, token |
DELETE | /claims/{id} | No | Cancel a claim |
GET | /product-in-wishlists | Yes | Check which wishlists contain a product. Query: product_id, variation_id |
Authentication
Authenticated endpoints require either:
- A valid WordPress cookie + nonce (
X-WP-Nonceheader) - A guest token via
X-LFWLR-Guest-Tokenheader - When guest wishlists are enabled, anonymous requests are allowed (guest tokens created on demand)
Hooks & Filters
Extend and customize plugin behavior via WordPress actions and filters.
Lifecycle Actions
| Hook | Parameters | Description |
|---|---|---|
lfwlr_init | — | Fires after the plugin is fully initialized |
wishlist_registry_pro_loaded | — | Fires after the Pro plugin loads (Pro) |
wishlist_registry_pro_init | — | Fires after Pro classes are initialized (Pro) |
lfwlr_register_rest_routes | — | Fires after base REST routes are registered; add custom routes here |
Wishlist Actions
| Hook | Parameters | Description |
|---|---|---|
lfwlr_wishlist_created | $wishlist_id, $args | After a wishlist is created |
lfwlr_wishlist_updated | $wishlist_id, $args | After a wishlist is updated |
lfwlr_before_delete_wishlist | $wishlist_id | Before a wishlist is deleted |
lfwlr_wishlist_deleted | $wishlist_id | After a wishlist is deleted |
Item Actions
| Hook | Parameters | Description |
|---|---|---|
lfwlr_item_added | $item_id, $wishlist_id, $product_id, $variation_id | After an item is added |
lfwlr_before_remove_item | $item_id, $item | Before an item is removed |
lfwlr_item_removed | $item_id, $wishlist_id, $product_id | After an item is removed |
lfwlr_item_updated | $item_id, $args | After an item is updated |
lfwlr_item_added_to_cart | $product_id, $wishlist_id, $variation_id, $qty | When a wishlisted product is added to cart |
lfwlr_item_purchased | $item_id, $order_id, $claim_id|null | When a wishlist item is purchased |
lfwlr_item_fulfilled | $item_id, $wishlist_id | When fulfilled quantity reaches needed quantity (Pro) |
Claim Actions (Pro)
| Hook | Parameters | Description |
|---|---|---|
lfwlr_item_claimed | $item_id, $email, $wishlist_id, $claim | When an item is claimed |
lfwlr_claim_cancelled | $claim_id, $claim | When a claim is cancelled |
lfwlr_claim_expired | $claim_id, $claim | When a claim expires |
lfwlr_claim_purchased | $claim_id, $order_id, $claim | When a claim transitions to purchased |
Filters
| Filter | Parameters | Description |
|---|---|---|
lfwlr_settings_fields | $settings | Modify admin settings fields array |
lfwlr_before_create_wishlist | $args | Modify wishlist data before creation |
lfwlr_before_update_wishlist | $args, $id | Modify wishlist data before update |
lfwlr_before_add_item | $data, $wishlist_id, $product_id | Modify item data before adding |
lfwlr_before_update_item | $args, $item_id | Modify item data before update |
lfwlr_wishlist_data | $row, $id | Filter wishlist data after retrieval |
lfwlr_user_wishlists | $wishlists, $user_id, $guest_token | Filter user's wishlist list |
lfwlr_total_item_count | $count, $user_id, $guest_token | Filter total item count |
lfwlr_default_wishlist_title | $title | Change the auto-created wishlist name |
lfwlr_rest_identity | $identity, $request | Override user/guest identity resolution |
lfwlr_share_url | $url, $wishlist | Modify the generated share URL |
lfwlr_can_view_shared_wishlist | $can_view, $wishlist, $token | Override shared page access check |
lfwlr_shared_page_config | $config, $wishlist, $items | Modify shared page JS config |
lfwlr_enriched_item | $enriched, $item, $product | Add data to enriched item objects |
lfwlr_remove_on_add_to_cart | $should_remove, $product_id | Override remove-on-add-to-cart per product |
lfwlr_heart_html | $html, $product_id | Modify loop heart button HTML |
lfwlr_banner_html | $html, $product_id | Modify single product banner HTML |
lfwlr_wishlist_button_shortcode_html | $html, $product_id, $atts | Modify shortcode button HTML |
lfwlr_template_args_{name} | $args | Filter template variables |
lfwlr_analytics_stats | $stats | Extend analytics data (Pro) |
Template Overrides
Override plugin templates from your theme.
How It Works
The plugin uses the lfwlr_locate_template() function to resolve template paths. It checks:
your-theme/logicfire-wishlist-registry-for-woocommerce/{template_name}plugin/templates/{template_name}(default)
Example: Override Email Template
To customize the "item purchased" email template:
your-theme/logicfire-wishlist-registry-for-woocommerce/emails/item-purchased.php
Copy the original from the plugin's templates/emails/item-purchased.php and modify as needed. Template variables are passed via extract() and can be filtered with lfwlr_template_args_{template_name}.
Frequently Asked Questions
Yes. Both the free and Pro plugins declare HPOS compatibility and work with custom order tables.
Yes. Enable Guest Wishlists in settings. Guest data is stored via a cookie-based token and can be merged when the user creates an account.
Three options: (1) Select a nav menu location in the Counter Menu Location setting, (2) Use the Wishlist Counter Gutenberg block in your header template, or (3) Use the Wishlist Counter Elementor widget.
Flush your permalinks: go to Settings → Permalinks and click Save Changes. The plugin registers rewrite rules for /wishlist/ and /registry/ prefixes.
A registry is a wishlist with an event date. Registries support quantity tracking, fulfillment progress, claims (Pro), and ship-to-recipient (Pro).
No. The Pro add-on requires the free Logicfire Wishlist & Registry for WooCommerce plugin. If the free plugin is deactivated, Pro will show an admin notice and not load.
When a visitor clicks "I'll buy this" on a registry item, the item is reserved. Other visitors see the remaining claimable quantity. If the claim isn't completed within the expiry period (default 48 hours), it expires and the item becomes available again.
Yes. Go to WooCommerce → Settings → Wishlist & Registry → Appearance and set the Primary, Hover, and Active colors. You can also use the Custom CSS field for more advanced styling.
Changelog
Free Plugin
- Fix – registry fulfillment bar no longer shows for plain wishlists
- Fix – quantity stepper respects stock limits on shared page
- Fix – shared-page "Add to Cart" respects stock quantity and displays stock-aware messages
- Fix – note icon tooltip hidden behind header on some themes
- Fix – "No wishlists yet" flash replaced with a proper loading skeleton
- New – Notify on Claim setting (under Notifications section; visible when Pro is active)
- New – WooCommerce email class
LFWLR_Email_Wishlist_Shared - Fix – variation images now display correctly in wishlist items
- Fix – REST identity filter applies to all authenticated endpoints
- New – Elementor widgets: Wishlist Button, Wishlist Counter, Registry Counter
- New –
lfwlr_enriched_itemfilter for extending item REST responses - Fix – guest token cookie path scoped to site home
- New – Privacy controls: public, shared, and private visibility per list
- New – Invite-based sharing with access levels (view / purchase)
- Fix – counter badge updates correctly after quick add
- New – Multi-wishlist support with drag & drop reordering
- New – Registry support with event dates and fulfillment tracking
- New – REST API v1 with full CRUD operations
- Refactor – Vue.js-powered frontend replacing legacy jQuery UI
Pro Plugin
- Fix – claim event hook prefix corrected to
lfwlr_ - Fix – scheduled actions use correct hook name
- Fix – claim status transitions handle edge cases
- Fix – asset enqueue uses correct file names
- Fix – purchase tracker bootstrap initialization
- Fix – analytics page query performance improvements
- New – Claims system ("I'll buy this") for gift registries
- New – Ship to registry recipient with cart splitting and address masking
- New – Analytics dashboard
- New – Purchase and fulfillment tracking
- New – REST API endpoints for claims