MyListing Products Listing Maker
The {CODICTS} MyListing Products Listing Maker plugin creates a bidirectional sync bridge between WooCommerce products and MyListing listings. When a WooCommerce product is created or updated, a corresponding MyListing listing is automatically generated. When a listing is saved — from the admin or frontend form — the linked WooCommerce product is created or updated. This lets you use MyListing’s Explore page, search filters, and listing templates to display and sell products, while WooCommerce handles cart, checkout, and order management.
The plugin supports Simple and Variable product types, provides an AJAX add-to-cart shortcode, a Product Price Range filter for the Explore page, price sorting, and full ACF (Advanced Custom Fields) compatibility.
Installation & Activation
Start by downloading the plugin from the Downloads page on your dashboard on the CoDicts website.
After downloading, install and activate the plugin in WordPress by navigating to “Plugins” > “Add New” > “Upload Plugin” and selecting the downloaded zip file. Click “Install Now” and then “Activate”.
On activation, the plugin automatically copies template files into your child theme directory and adds a new menu item in the WordPress admin sidebar for the settings page.
Important: The MyListing theme, a MyListing child theme, and WooCommerce must all be active. If any dependency is missing, an admin error notice will appear and functionality is disabled.
Key Features
| Feature | Description |
|---|---|
| Bidirectional Sync | Automatically creates/updates a listing when a product is saved, and vice versa. Works from both admin and frontend. |
| Simple & Variable Products | Full support for Simple products (single price/SKU/stock) and Variable products (multiple variations with their own prices, SKUs, stock, and images). |
| {C} Product Listing Field | A custom MyListing field that renders a comprehensive product management UI in the listing submission form. |
| AJAX Add-to-Cart Shortcode | Renders an add-to-cart button with quantity selector, variable product dropdowns, and animated cart feedback. |
| Product Price Range Filter | A custom Explore page filter for filtering listings by product price using a range or single slider. |
| Price Sorting | Sort listings by product price on the Explore page. |
| Status Sync | Status changes (publish, draft, trash) are mirrored between linked products and listings. |
| ACF Compatibility | Automatically syncs Advanced Custom Fields data between products and listings when field names match. |
| Bulk Resync | One-click button to generate listings for all existing WooCommerce products. |
| Dynamic Tags | Use [[codicts-product.price]] and [[codicts-product.stock]] in listing templates and preview cards. |
Settings Page
After activation, the plugin adds a {CODICTS} MyListing Products Listing Maker menu item in the WordPress admin sidebar. The settings page has the following options:
| Setting | Description |
|---|---|
| Products listing type | Select which MyListing listing type will be used for product-listing sync. All synced products will become listings of this type. |
| Sync delete status? | When checked, trashing a listing also trashes the linked WooCommerce product. When unchecked, deleting a listing does not affect the product. Product → Listing delete sync always works regardless of this setting. |
| Resync product listings | A one-time action. When checked and saved, the plugin iterates through all existing Simple and Variable products and creates or updates their linked listings. Use this if you have existing products from before the plugin was installed. |
Note: The “Resync product listings” checkbox does not save as a setting — it only triggers the resync operation when the form is submitted.
Setting Up a Product Listing Type
1. Go to MyListing → Listing Types and create a new listing type (e.g., “Products”) or edit an existing one.
2. Add the following fields to the listing type:
| Recommended Field | Purpose |
|---|---|
| Description | Maps to the WooCommerce product description. |
| Cover Image | Maps to the product featured image. |
| Gallery Image | Maps to the product gallery images. |
| {C} Product Listing | The custom product field — required for product data (prices, SKU, stock, variations). |
3. Save the listing type.
4. Go to the plugin’s settings page and select this listing type from the “Products listing type” dropdown.
5. Save changes.
The bidirectional sync is now active. Products created in WooCommerce will automatically get listings, and listings saved with the product field will automatically create WooCommerce products.
The {C} Product Listing Field
This custom field renders a product management interface on the add/edit listing form (both admin and frontend). It’s divided into two sections based on the selected product type.
Simple Product Fields
| Field | Description |
|---|---|
| Product Type | Dropdown to select “Simple Product” or “Variable Product.” |
| Regular price | The standard product price. Displays your WooCommerce currency symbol. |
| Sale price | The discounted price. Must be less than or equal to the regular price. |
| SKU | Stock Keeping Unit identifier. |
| Manage stock? | Toggle stock quantity management. When enabled, shows Stock quantity, Allow backorders, and Low stock threshold fields. |
| Stock quantity | Available stock count (visible when Manage stock is on). |
| Allow backorders? | Do not allow / Allow but notify / Allow (visible when Manage stock is on). |
| Low stock threshold | Triggers a low-stock notification (visible when Manage stock is on). |
| Stock status | In stock / Out of stock / On backorder (visible when Manage stock is off). |
| Sold individually | Limit purchases to 1 item per order. |
Variable Product Fields
When “Variable Product” is selected, a repeater field appears where you add product variations. Click “Add variation” to create entries. Each variation contains:
| Field | Description |
|---|---|
| Variation name | Attribute names separated by pipes. Example: color | size |
| Value | Attribute values separated by pipes, matching the names. Example: red | medium |
| Regular price | This variation’s regular price. |
| Sale price | This variation’s sale price. |
| Description | Description specific to this variation. |
| Product image | Image specific to this variation. |
| SKU | Variation-specific SKU (must be unique). |
| Stock fields | Same stock management options as Simple products, but per variation. |
Creating Simple Products
You can create a product-listing pair from either side:
From the listing side:
1. Create a new listing of the configured listing type.
2. Fill in the title (becomes the product name), description (becomes the product description), cover image (becomes the featured image), and gallery.
3. In the {C} Product Listing field, select “Simple Product.”
4. Enter the regular price and optionally a sale price. Configure inventory settings as needed.
5. Save the listing — a WooCommerce product is automatically created and linked.
From the product side:
Create a Simple Product in WooCommerce → Products — a linked listing is automatically created when the product is saved.
Creating Variable Products
Variable products use a pipe-delimited syntax to define attributes and their values. Each variation entry has a “Variation name” and “Value” field where attributes and values are separated by the pipe character (|).
1. Create a listing and select “Variable Product” as the product type.
2. Click “Add variation” to add variation entries.
3. For each variation, enter the attribute names and values using pipes:
Example: A clothing product with color and size variations:
| Variation Name | Value | Regular Price |
|---|---|---|
color | size | red | small | 29.99 |
color | size | blue | medium | 34.99 |
color | size | green | large | 39.99 |
This creates a WooCommerce variable product with two attributes (color with values red/blue/green, and size with values small/medium/large) and three variations with their respective prices.
4. Set prices, stock, images, and SKUs per variation as needed.
5. Save the listing — the variable product with all variations is automatically created in WooCommerce.
Important: Attribute names and values must not contain the pipe character (
|) as it’s used as the delimiter.
How Bidirectional Sync Works
The sync is fully automatic and works in both directions:
| Action | Result |
|---|---|
| Create/update a WooCommerce product | A linked MyListing listing is created or updated with the product’s title, description, images, price, SKU, and stock data. |
| Create/update a listing (admin or frontend) | A linked WooCommerce product is created or updated with the listing’s data. |
| Trash a product | The linked listing is also trashed. |
| Trash a listing | The linked product is trashed only if “Sync delete status” is enabled in settings. |
| Change a product’s status (publish/draft) | The linked listing’s status is updated to match. |
| Change a listing’s status | The linked product’s status is updated (trash status follows the “Sync delete” setting). |
What Gets Synced
| Data | Product → Listing | Listing → Product |
|---|---|---|
| Title / Name | ✓ | ✓ |
| Description | ✓ | ✓ |
| Status | ✓ | ✓ |
| Author | ✓ | ✓ |
| Featured image | ✓ (to cover + logo) | ✓ |
| Gallery images | ✓ | ✓ |
| Regular price | ✓ | ✓ |
| Sale price | ✓ | ✓ |
| SKU | ✓ | ✓ |
| Stock settings | ✓ (all inventory fields) | ✓ (all inventory fields) |
| Variations | ✓ | ✓ |
| ACF fields | ✓ (matching names) | ✓ (matching names) |
Note: Only Simple and Variable product types are supported. If a product is changed to an unsupported type (Grouped, External, etc.), the linked listing will be trashed.
Shortcodes
Add-to-Cart Button
[codicts-mylisting-products-listing-maker::add-to-cart]
Renders an add-to-cart button for the WooCommerce product linked to the current listing. Includes a quantity selector, animated SVG cart feedback, and AJAX submission (no page reload).
| Attribute | Default | Description |
|---|---|---|
| id | Current listing ID | The listing ID to get the product from. |
| button_label | “Add to cart” | Custom text for the button. |
| button_icon_only | false | When “true”, renders a compact icon-only button (hides quantity and label). |
Usage examples:
<!-- Full add-to-cart on a listing page -->
[codicts-mylisting-products-listing-maker::add-to-cart]
<!– Icon-only button for preview cards –> [codicts-mylisting-products-listing-maker::add-to-cart id=[[:id]] button_icon_only=”true”] <!– Custom button label –> [codicts-mylisting-products-listing-maker::add-to-cart button_label=”Buy Now”]
Button Behavior by Product State
| State | Full Mode | Icon-Only Mode |
|---|---|---|
| In stock (Simple) | Quantity input + cart button | Icon-only circle button |
| In stock (Variable) | Attribute dropdowns + quantity + cart button | Icon-only circle button (no dropdowns) |
| Out of stock | “Out of stock” text | Greyed-out basket icon |
| Not purchasable / Not found | Nothing rendered | Nothing rendered |
Tip: For variable products, the icon-only mode does not show attribute dropdowns. Use it for simple products on preview cards, and use the full mode on listing pages where customers need to select variations.
Get Price (Legacy)
[codicts-mylisting-products-listing-maker::get-price]
Returns the price HTML of the linked product. This shortcode is largely replaced by the [[codicts-product.price]] dynamic tag.
Dynamic Tags & Modifiers
The plugin registers dynamic tags that can be used in listing page template blocks, preview cards, and anywhere MyListing supports the [[field]] syntax:
| Dynamic Tag | Output |
|---|---|
[[codicts-product.price]] | The product’s formatted price HTML, including sale price formatting (original price crossed out with the sale price shown). |
[[codicts-product.stock]] | Stock status text: “In stock”, “Out of stock”, or “On backorder”. |
Use these in listing page block content, preview card templates, quick actions, or any MyListing template that supports dynamic tags.
Product Price Range Filter
The plugin provides a custom Explore page filter for filtering listings by product price.
Adding the Filter
1. Go to MyListing → Listing Types and edit your product listing type.
2. Navigate to the Search Forms (Explore) tab.
3. Add a new filter and select {C} Product Price Range.
4. Configure the filter:
| Option | Description |
|---|---|
| Label | Display label for the filter (e.g., “Price Range”). |
| Type | Range slider — user selects a min–max price range. Single slider — user selects a single price value. |
| Behavior | For single slider only: lower = shows listings ≤ selected value; upper = shows listings ≥ selected value. |
| Step size | The increment step for the slider (e.g., 1, 5, 10). |
| Format value | When checked, formats numbers with commas (e.g., 12,500). |
The filter automatically calculates the min and max prices from all published listings of that type, displays your WooCommerce currency symbol, and for variable products considers all variation prices.
Sorting by Price
You can sort product listings by price using the meta key _mlprdlm_current_product_price in your listing type’s sort options or custom WP_Query arguments.
ACF Compatibility
If Advanced Custom Fields (ACF) is installed, the plugin automatically syncs ACF data between products and listings:
1. Create ACF field groups for the product post type.
2. Use the same field name keys on both your MyListing listing fields and the ACF fields.
3. When a product is saved, ACF field values are automatically copied to the linked listing.
4. When a listing is saved, matching ACF field values are copied to the linked product.
This enables workflows where custom data entered on either the product or listing side stays in sync.
Resync Existing Products
If you install the plugin on a site that already has WooCommerce products:
1. Go to the plugin’s settings page.
2. Check the “Resync product listings” checkbox.
3. Click Save Changes.
The plugin iterates through all published Simple and Variable products and creates or updates their linked listings. This is a one-time operation — the checkbox does not save as a permanent setting.
Template File Management
The plugin copies three template files into your child theme:
| Template | Purpose |
|---|---|
| Product field form | Renders the {C} Product Listing field UI on the add/edit listing form. |
| Price range filter options | Renders the filter configuration UI in the listing type editor. |
| Price range filter | Renders the price range slider on the Explore page. |
| Event | What Happens |
|---|---|
| Plugin activation | Templates are copied to the child theme. |
| Plugin update | Templates are force-reinstalled (overwrites existing files). |
| Plugin deactivation | Templates are deleted from the child theme. The product field and price filter stop rendering. |
| Theme switch | Template tracking is reset. |
Data is preserved: Deactivating the plugin removes templates but does not delete any product or listing data. The cross-reference links and product data remain intact. Reactivating restores full functionality.
Template overwrite warning: If you manually customize any template files in the child theme, your changes will be overwritten when the plugin is updated or reactivated.
Frequently Asked Questions
Does this plugin require WooCommerce?
Yes. WooCommerce is required for product management, cart, and checkout. An admin error notice appears if WooCommerce is not detected.
Can I use this with multiple listing types?
No. The plugin currently supports one listing type for product sync. All products are mapped to the single listing type selected in settings.
What product types are supported?
Only Simple and Variable products. If a product is changed to an unsupported type (Grouped, External, etc.), the linked listing is trashed and the link is removed.
What happens when I delete a product?
Trashing a product automatically trashes the linked listing. This always works regardless of the “Sync delete status” setting.
What happens when I delete a listing?
This depends on the “Sync delete status?” setting. If enabled, trashing a listing also trashes the linked product. If disabled, the product remains unaffected when the listing is trashed.
How do I display the product price on a listing page?
Use the dynamic tag [[codicts-product.price]] in your listing page template blocks or preview card templates. It outputs the formatted price HTML including sale price formatting.
How do I add an add-to-cart button to preview cards?
Use the shortcode with icon-only mode: [codicts-mylisting-products-listing-maker::add-to-cart id=[[:id]] button_icon_only="true"]
Can I use the icon-only add-to-cart button with variable products?
Yes, but the icon-only mode does not show attribute dropdowns. Customers would need to visit the full listing page to select variations. Use the full add-to-cart mode on listing pages for variable products.
How does the price filter work with variable products?
Each variation’s price is stored as a separate entry on the listing. The price range filter matches listings where any variation falls within the selected range. The max price calculation considers all variation prices.
Will existing products get listings automatically?
Not on plugin activation. Use the “Resync product listings” checkbox on the settings page to generate listings for all existing Simple and Variable products.
How do I sort listings by price?
Use the meta key _mlprdlm_current_product_price in your listing type’s sort options or custom query arguments.
Does the plugin sync product categories and tags?
No. WooCommerce product categories and tags are not automatically mapped to MyListing taxonomies. You would need to handle this separately through custom code or ACF fields.
How does the pipe delimiter work for variable products?
Attribute names and values are separated by the pipe character (|). The position of each value corresponds to the position of each name. For example, “color | size” with “red | medium” means color=red and size=medium. Attribute names and values must not contain the pipe character.
What happens if I save a product from both sides at the same time?
The plugin has built-in infinite loop prevention. When a sync operation is running, the plugin temporarily disables its own hooks to prevent the product save from triggering a listing save which would trigger another product save.
Troubleshooting
Products Not Creating Listings (or Vice Versa)
| Cause | Solution |
|---|---|
| No listing type selected | Go to the plugin settings page and select a listing type from the “Products listing type” dropdown. |
| Listing type doesn’t have the product field | Edit the listing type and add the {C} Product Listing field to the Fields tab. |
| Unsupported product type | Only Simple and Variable products are supported. Grouped, External, and other types won’t sync. |
| Plugin deactivated or templates missing | Deactivate and reactivate the plugin to reinstall templates. |
| WooCommerce not active | Ensure WooCommerce is installed and activated. |
Existing Products Don’t Have Listings
| Cause | Solution |
|---|---|
| Products existed before plugin installation | Go to the settings page, check “Resync product listings,” and click Save Changes. This creates listings for all existing Simple and Variable products. |
Add-to-Cart Button Not Working
| Cause | Solution |
|---|---|
| Product not linked | Ensure the listing has a linked WooCommerce product. Check that the listing was saved with the product field data. |
| Product out of stock | The button shows “Out of stock” text or a greyed-out icon. Update the product’s stock status. |
| JavaScript error | Check the browser console (F12 → Console) for errors. The AJAX add-to-cart requires jQuery and WooCommerce scripts to be loaded. |
| Variable product with icon-only mode | Icon-only mode doesn’t show attribute dropdowns. Use the full mode on listing pages for variable products. |
Price Range Filter Not Working on Explore Page
| Cause | Solution |
|---|---|
| Filter not added | Edit the listing type, go to Search Forms, and add the {C} Product Price Range filter. |
| No price data on listings | Listings must have product price data stored. Resync products if needed, or ensure listings are saved with the product field. |
| Slider shows 0–0 range | No published listings of this type have price data. Create or resync product listings first. |
Images Not Syncing Between Products and Listings
| Cause | Solution |
|---|---|
| CDN or WebP images | The listing→product image sync uses WordPress’s attachment_url_to_postid() function, which may not work with CDN-rewritten URLs or WebP-converted images. Ensure images are served from the standard WordPress uploads directory. |
Status Changes Not Syncing
| Cause | Solution |
|---|---|
| Listing trash not affecting product | This is controlled by the “Sync delete status?” setting. Enable it on the settings page if you want listing trash to also trash the product. |
| Bulk edit or import triggered sync | Any product save triggers the sync. Bulk edits and imports may cause many sync operations. This is expected behavior. |
“MyListing Theme Not Detected” or “WooCommerce Not Detected” Error
All three dependencies must be met: the MyListing theme must be active, a MyListing child theme must be in use, and WooCommerce must be installed and activated. Go to Appearance → Themes and Plugins → Installed Plugins to verify.
For further support, visit codicts.com or contact us at support@codicts.com.