Title: Oli Product Feed
Author: Olivier Bigras
Published: <strong>October 16, 2026</strong>
Last modified: October 16, 2026

---

Search plugins

![](https://ps.w.org/oli-product-feed/assets/banner-772x250.png?rev=3750329)

![](https://ps.w.org/oli-product-feed/assets/icon-256x256.png?rev=3750329)

# Oli Product Feed

 By [Olivier Bigras](https://profiles.wordpress.org/bigrat95/)

[Download](https://downloads.wordpress.org/plugin/oli-product-feed.0.4.1.zip)

 * [Details](https://wordpress.org/plugins/oli-product-feed/#description)
 * [Reviews](https://wordpress.org/plugins/oli-product-feed/#reviews)
 *  [Installation](https://wordpress.org/plugins/oli-product-feed/#installation)
 * [Development](https://wordpress.org/plugins/oli-product-feed/#developers)

 [Support](https://wordpress.org/support/plugin/oli-product-feed/)

## Description

**Oli Product Feed** builds product feed files for shopping platforms from your 
WooCommerce catalog. Each feed targets one platform, one language and one currency.
Files are generated in the background, in small batches, and their URL never changes,
so the platform can fetch them on a schedule.

#### Channels

 * **Google Merchant Center** (XML RSS 2.0, CSV or TSV)
 * **Pinterest Catalogs** (availability _preorder_ for products on backorder)
 * **Meta catalogs** for Facebook and Instagram (Commerce Manager data feed)
 * **TikTok Catalog** (CSV, TSV or XML)
 * **Microsoft Merchant Center** for Bing Shopping (tab-separated TXT or XML)
 * **Generic CSV, TSV or XML** with your own columns, for comparison sites and marketplaces
 * Other channels can be added with the `oliprfe_channels` filter

#### Feeds

 * **Simple and variable products**: one item per variation, grouped with `item_group_id`
 * **Language and currency per feed**: with **TranslatePress**, titles, descriptions,
   terms and links are taken in the feed language (the locale is set for the whole
   generation, including translated permalinks such as `/fr/`); with **Price Based
   on Country**, prices come from a pricing zone and links can carry the country
   parameter
 * **Attribute mapping**: for every attribute, use the automatic rule or pick a 
   product field, a product attribute, a taxonomy, a custom field (meta), a static
   value or a copy of another final attribute, with prefix, suffix, fallback and
   value map; a preview column shows the value for a sample product
 * **Variant color and size** sent by default from the `pa_color` (or `pa_colour`,
   Color, Colour) and `pa_size` (or Size) attributes, in the feed language; an explicit
   mapping always wins
 * **Per-product values** for the odd product (for example the color of one item)
 * **Title template** such as `{brand} {name} {type} - {variation}`, with the type
   set per category
 * **GTIN validation** (check digit); **MPN = SKU** for all brands or only for a
   list of brands
 * **Filters**: categories, tags, price range, stock status, product IDs, words 
   in the title, required fields; exclusion rules and availability rules on custom
   fields; live count of the matching products
 * **Backorder availability date**: optional per-feed lead time (default 21 days)
   for products on backorder or sold while out of stock. Google, Microsoft (Bing)
   and Meta receive `g:availability` = backorder (or preorder if configured), `g:
   availability_date` in ISO 8601 with the site time zone, and optional handling
   time. In-stock items are unchanged. A per-product override (days or a fixed date)
   can be set on the product and on each variation.
 * **Google product category** per category or per product
 * **UTM and extra link parameters**
 * **Clear log**: every generation lists the excluded products and why

#### Generation and serving

 * **Background generation** with Action Scheduler (WP-Cron fallback), in batches,
   with a lock and an atomic file swap
 * **Schedule**: hourly, twice a day, daily or weekly, at an off-peak hour; optional
   regeneration when products change (at most every 15 minutes)
 * **Static file** (default) or **served by WordPress** with a short cache, `X-Robots-
   Tag: noindex`, ETag and Last-Modified, for hosts whose CDN keeps static files
   too long. The pre-generated file is streamed while the plugins load (never rebuilt
   during the request); an optional must-use loader serves it even earlier
 * **Logs** in WooCommerce > Status > Logs
 * **Access**: the plugin screens need the `manage_woocommerce` capability (administrators
   and shop managers); when shop manager access is turned off in the settings, `
   manage_options` (administrators)
 * **WP-CLI**: `wp oli-feed list|generate|status|export|import|settings`

#### Privacy

The plugin makes no external request, loads no remote asset and collects no data.
Feeds only contain public product data.

## Screenshots

[⌊Feed list with status, product count and copyable URL.⌉⌊Feed list with status,
product count and copyable URL.⌉[

Feed list with status, product count and copyable URL.

[⌊Feed editor: target, filters and attribute mapping.⌉⌊Feed editor: target, filters
and attribute mapping.⌉[

Feed editor: target, filters and attribute mapping.

[⌊Settings.⌉⌊Settings.⌉[

Settings.

## Installation

 1. Upload the plugin and activate it (WooCommerce is required).
 2. Go to **WooCommerce > Product Feeds** and click **Add New Feed**.
 3. Choose the channel, language, country and currency, then save and generate.
 4. Copy the feed URL into the platform (Merchant Center, Pinterest, Commerce Manager)
    as a scheduled fetch.

## FAQ

### The platform still sees an old version of the feed

Your host or CDN probably caches static files for a long time. In **Settings**, 
choose **Through WordPress**: the feed is then served with a short cache (one hour
by default) and validators, and the URL becomes `/?oliprfe_feed=<file>`.

### How do I generate a feed from the command line?

wp oli-feed generate or `wp oli-feed generate --all`.

### How do I make the WordPress serving faster?

The feed is sent while the plugins load, before WooCommerce, from the pre-generated
file.

### Who can manage the feeds?

Users with the `manage_woocommerce` capability: administrators and shop managers.
Uncheck “Shop managers” in WooCommerce > Product Feeds > Settings to require `manage_options`(
administrators only).

### Where are the files?

In `wp-content/uploads/oli-product-feed/` by default. The folder can be changed 
in **Settings** or with the `oliprfe_output_dir` filter (return the same folder 
on every request). When it changes, the feed files move to the new folder and the
previous folder is cleaned: only the files the plugin wrote are deleted, and the
folder itself only when the plugin created it and nothing else is in it. A folder
that cannot be used (a symbolic link or inside one, real path outside the uploads
directory, not writable, cannot be created) is refused: the feeds stay where they
are, nothing is moved or deleted, and the plugin screens show a notice. A file of
the same name that the plugin did not write is never overwritten or deleted: the
feed stays in its previous folder until that file is removed.

### What is deleted when the plugin is deleted?

The scheduled tasks and their Action Scheduler history are always removed. When **
Delete all data when the plugin is deleted** is checked, the feeds, the settings,
the generated files of every output folder the plugin used and its WooCommerce logs(
source `oli-product-feed`) are deleted too. Files and folders the plugin did not
write or create are never touched, and no symbolic link is followed. When it is 
unchecked (default), the feeds, settings, files and logs are kept.

## Reviews

There are no reviews for this plugin.

## Contributors & Developers

“Oli Product Feed” is open source software. The following people have contributed
to this plugin.

Contributors

 *   [ Olivier Bigras ](https://profiles.wordpress.org/bigrat95/)

[Translate “Oli Product Feed” into your language.](https://translate.wordpress.org/projects/wp-plugins/oli-product-feed)

### Interested in development?

[Browse the code](https://plugins.trac.wordpress.org/browser/oli-product-feed/),
check out the [SVN repository](https://plugins.svn.wordpress.org/oli-product-feed/),
or subscribe to the [development log](https://plugins.trac.wordpress.org/log/oli-product-feed/)
by [RSS](https://plugins.trac.wordpress.org/log/oli-product-feed/?limit=100&mode=stop_on_copy&format=rss).

## Changelog

#### 0.4.1

 * Fix: TranslatePress fr_CA feeds no longer write doubled language slugs (`/fr/
   fr/…`, a 404) or `http://` on item links and the channel `<link>`. URLs that 
   already have `/fr/` are left as-is; default-language URLs are converted once;`
   force_https` is applied after conversion.

#### 0.4.0

 * NEW: Automatic availability date for products sold on backorder or while out 
   of stock (lead time in days, default 21). Google, Microsoft (Bing) and Meta; 
   optional handling time; per-product override on the product edit screen and on
   variations.
 * Fix: TranslatePress feed language (e.g. fr_CA) now switches the current language
   and locale while the feed is generated, so titles, descriptions and /fr/ links
   are taken from TranslatePress instead of staying in English.

#### 0.3.9

 * WordPress.org review: the optional must-use loader is removed (no file outside
   the plugin is loaded).
 * No inline style attribute in the admin footer (moved to the enqueued stylesheet).
 * Admin script and style handles use the plugin prefix (oliprfe-admin).

#### 0.3.8

 * The support notice dismiss handler is now attached to the enqueued admin script
   with `wp_add_inline_script()` (no inline `<script>` tag).

#### 0.3.7

 * NEW: Feeds and Donate links on the Plugins screen, optional support notice on
   plugin screens, footer donation link, and Donate link on the WordPress.org plugin
   page (PayPal)

#### 0.3.6

 * Namespace renamed from `OliProductFeed` to `Oliprfe` so the plugin prefix is 
   a single segment of four or more characters (the previous namespace was detected
   as the too-short prefix `oli`).
 * Admin output: every form fragment is escaped late with `wp_kses` at the echo 
   site (no unsanitized variables echoed).
 * Optional must-use loader: loads the local Endpoint file with a literal path under`
   WP_PLUGIN_DIR` when the plugin is active (no remote file access, no variable `
   require`).

#### 0.3.5

 * Prefix: every global constant, function, hook and variable now uses the `oliprfe_`/`
   OLIPRFE_` prefix (options, meta keys, transients, post type and actions included)
   so Plugin Check recognizes the plugin prefix. The `oli-product-feed` text domain
   is unchanged.
 * Feed editor: the posted configuration is sanitized before it is validated, saved
   or kept for redisplay after an error (no unsanitized input is stored).
 * Translations are loaded by WordPress automatically (the `load_plugin_textdomain()`
   call was removed); language files are served from the WordPress.org translation
   platform and are no longer bundled.
 * Optional must-use loader: early path when the plugin is active.

#### 0.3.4

 * Output folder: a new folder that cannot be used (symbolic link, outside uploads,
   not writable, cannot be created) is refused. The feeds stay in their folder and
   keep being served, nothing is moved or deleted, and a notice explains why.
 * A feed file is never moved over, or generated over, a file of the same name that
   the plugin did not write: the feed stays in its previous folder and a notice 
   explains what to do.
 * The output folder is no longer written through a symbolic link (the uploads directory
   itself may be one).

#### 0.3.3

 * Output folder: when it changes (setting or `oliprfe_output_dir` filter), the 
   feed files move to the new folder and the previous folders of the plugin are 
   cleaned. The folders and files the plugin wrote are recorded; nothing else is
   ever deleted.
 * Uninstall with “Delete all data”: every output folder the plugin used is cleaned,
   and the plugin’s WooCommerce logs (log files and database log rows) are deleted.
 * A feed moved to the trash by any path (Posts API, `wp_update_post`, WP-CLI) has
   its file removed at once, so the static URL no longer serves it.

#### 0.3.2

 * Color and size of variants sent by default from the pa_color and pa_size attributes(
   explicit mapping first).
 * A trashed feed is no longer served: its file is removed and the WordPress serving
   index refreshed, also when trashed outside the plugin.
 * Static file mode: `?oliprfe_feed=` answers 404 instead of the home page.
 * Uninstall also removes the plugin’s Action Scheduler history (actions, logs, 
   group) and the files of trashed feeds.
 * Feed list: distinct URL label per feed with WordPress serving; no horizontal 
   overflow.
 * Documentation: access capability (manage_woocommerce, or manage_options).

#### 0.3.1

 * Fix: with WordPress serving, the file of an inactive feed (imported or saved 
   inactive, then generated) answered 404. Every generated feed is now served; inactive
   only stops the scheduled generation.

#### 0.3.0

 * TikTok, Microsoft (Bing) and generic CSV/TSV/XML channels.
 * Tag and price range filters, matching products count, value preview in the mapping,
   list search and Errors view.
 * Mapping source “copy of another attribute” (final value) and per-product values.
 * Descriptions: translated meta description when the content has no translation;
   French spacing before ; : ! ? kept.
 * Title type: same rule in every language; optional words in brackets.
 * WordPress serving: the file is sent while the plugins load (optional must-use
   loader), application/xml, max-age bounded by the regeneration interval.
 * Settings: logs, shop manager access, regeneration on product changes, regenerate
   all, next run.

#### 0.2.0

 * Admin screens: feed list, complete feed editor, settings, generate, duplicate
   and delete, bulk actions, progress.
 * Pinterest and Meta channels.
 * Title template per feed, MPN rule by brand list, priority brands.
 * Description cleanup patterns and field rules per Google category.
 * WP-CLI: run-due.
 * Optional serving through WordPress with short cache headers.
 * French (France and Canada) translations.

#### 0.1.0

 * First version: Google Merchant Center feeds, TranslatePress, Price Based on Country,
   batches, WP-CLI.

## Meta

 *  Version **0.4.1**
 *  Last updated **1 day ago**
 *  Active installations **Fewer than 10**
 *  WordPress version ** 6.4 or higher **
 *  Tested up to **7.1.3**
 *  PHP version ** 7.4 or higher **
 * Tags
 * [Facebook Catalog](https://wordpress.org/plugins/tags/facebook-catalog/)[Google Merchant Center](https://wordpress.org/plugins/tags/google-merchant-center/)
   [product feed](https://wordpress.org/plugins/tags/product-feed/)[Tiktok](https://wordpress.org/plugins/tags/tiktok/)
   [woocommerce](https://wordpress.org/plugins/tags/woocommerce/)
 *  [Advanced View](https://wordpress.org/plugins/oli-product-feed/advanced/)

## Ratings

No reviews have been submitted yet.

[Your review](https://wordpress.org/support/plugin/oli-product-feed/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/oli-product-feed/reviews/)

## Contributors

 *   [ Olivier Bigras ](https://profiles.wordpress.org/bigrat95/)

## Support

Got something to say? Need help?

 [View support forum](https://wordpress.org/support/plugin/oli-product-feed/)

## Donate

Would you like to support the advancement of this plugin?

 [ Donate to this plugin ](https://www.paypal.com/donate/?hosted_button_id=29SAPKFAHMTNW)