For the complete documentation index, see llms.txt. This page is also available as Markdown.

Deals websites

Build a deals site with Content Egg — ready-made deal pages, a deals archive, voting, and deals that expire on their own.

A deals site publishes one page per offer: a product, its current price, what it used to cost, and a button to the store. What separates a good deals site from a stale one is freshness: a deal that sold out or went back up in price should stop being shown as a deal.

Content Egg has a Deals feature built for exactly this. It adds a Deal post type whose pages assemble themselves from your product data, a deals archive with sorting and filters, visitor voting, and a lifecycle that expires deals automatically. It works with any theme, in both the free and the Pro version.

A deal page: breadcrumbs, product image, store, category, price with old price and discount, Hot badge, Get deal at Amazon.com button and deal score voting
A deal page, assembled from the product's data

How deals work

  • A deal is a post of its own type, not a regular post. Deals get their own archive (/deals/), their own store and category pages, and their own list in wp-admin.

  • A deal is one offer from one store. You add products to a deal the usual way, and one of them is the deal's main offer. Its price, discount and stock decide the deal's status. Other products you add appear lower on the page as "All offers".

  • The page builds itself. You write a line or two about the deal. Price, discount, store, the buy button, price history, a price alert form, the store's coupons and related deals are all added automatically.

  • Deals expire on their own. When the product goes out of stock, its price rises, or the deal's end date passes, the deal is marked expired. It stays online, greyed out, so the page keeps its search traffic.

Deals are off by default. Nothing changes on your site until you switch them on.

Step 1: Turn deals on

Go to Content Egg → Settings → Deals and tick Enable deals. A new Deals menu appears in wp-admin.

The Deals section of Content Egg settings
Content Egg → Settings → Deals
Setting
What it does

Enable deals

Adds the Deal post type, the deals archive, voting and the Deals block.

Deal URL slug

The URL base of a single deal. Default deal, e.g. /deal/my-deal/.

Deals archive slug

The URL of the deals listing. Default deals, i.e. /deals/. Must differ from the deal slug.

Expire when the price rises by (%)

A deal expires when its price rises more than this above the price it was published at. Default 5.

Reactivate automatically

Brings a deal back when the product is back in stock or its price falls back. Deals that ended, or that you expired by hand, never come back on their own.

Hide expired deals from listings

Removes expired deals from the archive and from Deals blocks. Their pages stay online either way.

Noindex expired deals

Asks search engines not to index a deal page once it has expired.

Deal button text

The text of the buy button on a deal page. Leave empty for Get deal at and the store name (Get deal when the store is unknown). Supports %MERCHANT%, %DOMAIN%, %PRICE% and %STOCK_STATUS%, e.g. Get it for %PRICE%.

Deal voting

Shows up/down voting on deals.

Only logged-in users can vote

Restricts voting to registered users.

Hot deal score

Deals whose vote score reaches this number get a Hot badge on their card and page. 0 turns the badge off. Default 50.

Deals per archive page

How many deals the archive shows per page. Default 24.

Step 2: Choose where deals come from

Deals use your existing Content Egg modules, so a deal can come from any store you already work with.

  • Amazon, Walmart, eBay, Best Buy and other API modules (Pro): the best fit when you post deals from marketplaces.

  • Feed modules (free and Pro): import an affiliate network's product feed and create deals from it, including automatically. See Feed Import.

  • Offer module: add a deal from any store by URL, with a price you enter yourself.

Whichever you use, the module's Price update setting decides how often a deal's price and stock are re-checked, and so how quickly an expired deal is noticed. See Price update.

Step 3: Add deals

There are three ways to add deals. Most sites use more than one.

Deals → Add deals opens Bulk Import with the built-in Deal preset already selected. Paste product URLs or keywords, one per line, choose the module, and run it. Each line becomes a deal.

Bulk Import with the Deal preset selected and product URLs pasted
Deals → Add deals: one deal per product link

The Deal preset creates deals as drafts, titled after the product and with the product's description as the text, so you can add a line of your own before publishing. The imported product becomes the deal's main offer.

You can create your own deal presets too: in Import Presets, set Post Type to Deal. Deals are filed under Deal Categories, not post categories, so use Dynamic categories to create them from the product's category, or set them after import.

One deal at a time

Deals → Add New Deal, then add a product with Content Egg's product search as you would in any post. The first product with a price becomes the main offer. Write a short description and publish.

Automatically, with "real discounts only"

An Auto Import rule with a Deal preset keeps adding deals from a keyword list on a schedule. Two rule settings keep it to real deals:

  • Minimum discount (%): imports only products at least this much below their old price. Products the source reports no saving for are skipped.

  • In-stock products only: skips products that are out of stock.

An auto-import rule with Minimum discount and In-stock products only
An auto-import rule that imports only real discounts

The rule's log shows how many products were skipped, e.g. Skipped by discount or stock rule: 7.

Managing a deal

When you edit a deal, the Deal panel in the editor sidebar shows its state and lets you change it.

The Deal panel in the block editor sidebar: status, price and score, main offer, end date, coupon code and note
The Deal panel
Control
Use it to

Main offer

Choose which product the deal is about, when it has several. Choosing one resets the deal's reference price to that product's current price.

Deal ends

Set a date and time when the deal ends. The page shows a countdown, and the deal expires when the time comes. Clear removes the end date.

Mark expired / Mark active again

Expire a deal by hand, or bring an expired deal back. Bringing it back resets the reference price to today's price.

Coupon code / Coupon note

Give the deal its own coupon code, with an optional one-line note. See Deals with a coupon code.

Refresh

Reload the panel after you add or remove products.

The panel also shows the deal's votes.

Deals → All Deals lists every deal with its price, discount, status, votes, and when its price was last checked. The status filter shows only active or only expired deals.

Deals → All Deals with price, discount, status and votes columns
Deals → All Deals

Deals with a coupon code

Many deals need a code at checkout. Enter it in the Deal panel under Coupon code, add a Coupon note if the code needs explaining (e.g. Extra 20% off at checkout), and click Save coupon.

The code then appears on the deal page, next to the price and the buy button, with a Copy button. The deal's card in the archive and in blocks gets a Coupon label.

A deal page with a coupon code box, Copy button and note under the price
A deal with its own coupon code
  • The coupon belongs to the deal. It has no end date of its own: set Deal ends if the code expires, and the deal expires with it.

  • Remove in the panel deletes the coupon.

  • Shop-wide coupons from Shops & coupons still appear lower on the deal page, as before.

When deals expire

A deal's status is re-checked every time its price is updated, and once an hour for end dates.

The deal shows
Why
Comes back on its own?

Expired: out of stock

The main offer is out of stock.

Yes, when it is back in stock.

Expired: the price went up

The price rose more than your threshold above the price the deal was published at.

Yes, when the price falls back.

Expired: no longer available

The main offer was removed from the deal.

Yes, when it is added back.

Expired: the deal has ended

The deal's end date has passed.

No. Set a new end date or use Mark active again.

Expired

You expired it by hand.

No. Use Mark active again.

"Comes back on its own" applies only while Reactivate automatically is on.

An expired deal stays online. Its page and card are greyed out with the reason, voting is closed, and the button reads Check current price instead of Get deal. By default, expired deals are hidden from the archive and from Deals blocks.

An expired deal: greyed-out image and an 'Expired: the price went up' label
An expired deal keeps its page

A price that keeps dropping never expires a deal. The deal is compared with the price it was published at, and a lower price is still a deal.

What visitors see

The deal page

From top to bottom, each part appears only when there is something to show:

  • breadcrumbs: Home › Deals › category › deal;

  • the product image with a discount badge; the store, the deal's category and when it was posted; the title; the price, old price and discount, with a Hot badge for highly voted deals;

  • Checked N hours ago: when the price was last verified;

  • Lowest price in 30 days: shown only when the price history covers at least 30 days, the price was higher earlier in that period, and today's price is the lowest in it. New deals earn this badge over time;

  • a countdown, when the deal has an end date;

  • the deal's coupon code, if it has one;

  • the buy button (Get deal at and the store name by default, or your Deal button text), which uses your affiliate link redirects when they are on, and voting;

  • your description, under Deal details;

  • price history (once the product has at least two recorded prices) and a price alert form for the main offer;

  • All offers, when the deal has products from more than one store;

  • the store's coupons from Shops & coupons;

  • related deals from the same category or store;

  • comments.

Deal pages also output Product structured data with a single Offer for the main offer, including priceValidUntil when the deal has an end date.

The deals archive

/deals/ lists all active deals as cards. A row of category links sits under the title. Visitors can sort by Newest, Biggest discount, Popular or Ending soon, filter by store and category, and show only deals With coupon.

The deals archive with sort links, store and category filters and a grid of deal cards
The deals archive at /deals/

Every store and every category has its own page too, e.g. /deals/store/amazon-com/ and /deals/category/electronics/. Stores are created automatically from the deal's shop, so a new store needs no setup. You can rename a store, or add a description to it, under Deals → Stores.

Store and category pages

  • Breadcrumbs appear on every deal page, the archive and each store and category page. They include BreadcrumbList structured data, unless Yoast SEO or Rank Math is active: those plugins output their own.

  • A store page starts with the store's logo, its number of deals, its description and a Visit link to the store. It also shows the store's coupons from Shops & coupons. If the store has an About text in Shops, that text appears below the deals.

  • With Cashback Tracker installed, a store page also links to that store's Cashback Tracker shop page, where members earn cashback.

  • A category page shows links to its subcategories.

A store page: breadcrumbs, the Walmart logo, deal count, Visit walmart.com and a Cashback & coupons at Walmart link, then the store's deals
A store page, with the link to its Cashback Tracker shop page

Voting

Visitors can vote a deal up or down, once per deal. The score appears on the deal and its card, and Popular sorts by it. Voting closes when a deal expires.

The Deals block

Put deals anywhere on your site, such as a homepage, a sidebar or a category page, with the Deals block from the Content Egg block category.

A page with three Deals blocks: Hot right now, Biggest discounts, Ending soon
Deals blocks on a homepage
Option
Values

Sort

Newest, Biggest discount, Popular, Ending soon

Number of deals

1–48

Columns

1–6

Only deals from the last N days

e.g. 1 for "Today's deals", 7 for "Top this week"; 0 for all

Store slugs

comma-separated, e.g. amazon-com

Category slugs

comma-separated

Hide expired deals

on or off

Only deals with a coupon code

on or off (coupon_only=1 in the shortcode)

In the classic editor, or in a widget, use the shortcode with the same options:

A few layouts that work well on a homepage:

  • Hot right now: sort=popular days=7

  • Biggest discounts: sort=discount

  • Ending soon: sort=ending

  • Today's deals: sort=new days=1

  1. Start with one or two stores you already have affiliate access to, and turn deals on.

  2. Post your first deals by hand with Add deals, so you see how pages and expiry behave with your modules.

  3. Set the module's Price update to a schedule that suits your deals. Once or twice a day is enough for most sites.

  4. Build the homepage from Deals blocks: popular this week, biggest discounts, ending soon.

  5. Add Auto Import rules with a minimum discount once you trust a source, and keep their preset on Draft at first.

  6. Keep expired deals hidden from listings but online. Turn on Noindex expired deals only if many thin, expired pages start to hurt your site.

Customizing the look

Deal pages follow your theme's header, footer and fonts, and they work with classic and block themes.

Colors and spacing are CSS custom properties. Set any of them in your theme's CSS, on :root or on any wrapper:

Templates can be overridden from your theme. To replace a whole page, copy it into your theme's folder under the same name: single-cegg_deal.php, archive-cegg_deal.php, taxonomy-deal_store.php or taxonomy-deal_category.php.

To change one part, copy it into yourtheme/content-egg/deals/:

File
Part

_hero.php

The top of the deal page: image, price, button, voting

_sections.php

Price history, price alert, all offers, coupons, related deals

_card.php

A deal card in the archive and in blocks

_coupon.php

The coupon code box on the deal page

_votes.php

The voting widget

_toolbar.php

The archive's sort links and filters

_breadcrumbs.php

The breadcrumbs

_term_header.php

The header of a store or category page

_chips.php

The row of category links

Two filters change the navigation from code: cegg_deal_breadcrumbs edits the breadcrumb trail (return an empty array to hide it), and cegg_deal_store_cashback_url changes or removes the Cashback Tracker link on a store page.

The Hot badge can also be tuned from code. cegg_deal_hot_score changes the threshold, and cegg_deal_is_hot decides per deal:

Copy the originals from content-egg/application/deals/views/.

FAQ

Do I need a special theme? No. Deals work with any theme, classic or block.

Does it work in the free version? Yes. All deal features are in the free version. The only difference is which modules you can use: Amazon and Walmart, for example, are Pro modules.

Why does my new deal not show the "Lowest price in 30 days" badge? The badge needs at least 30 days of price history for the deal's product, and it only appears when today's price is the lowest in that period. It shows up on its own once the history exists.

Can I use deals and regular posts on the same site? Yes. Deals have their own post type, archive and menu, and they don't change your posts.

What happens to my deals if I turn the feature off? The deal pages and the archive go offline, but the deals themselves stay in your database. Turn the feature back on and they return as they were.

Last updated