MyListing Relist Expired Listings
The {CODICTS} MyListing Relist Expired Listings plugin prevents listings from disappearing when they expire or when a WooCommerce Subscription ends. Instead of the default MyListing behavior — which sets listings to “expired” status and removes them from the site — this plugin automatically switches expired listings to a designated free/basic package and re-publishes them, keeping listings visible at all times.
When a subscription is reactivated, the plugin automatically restores listings to their original paid package — no manual intervention needed.
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”.
After activation, navigate to Listing Relist in the WordPress admin sidebar to configure the plugin settings.
Key Features
| Feature | Description |
|---|---|
| Automatic Relisting | When a listing expires or its subscription ends, the plugin automatically switches it to a free/basic package and re-publishes it — keeping the listing visible on your site. |
| Subscription Reactivation | When a cancelled or expired subscription is reactivated, listings are automatically restored to their original paid package. |
| Delay Grace Period | Configure a grace period (in days) for on-hold subscriptions, giving users time to fix payment issues before their listings are downgraded. |
| Email Notifications | Send styled HTML email notifications to selected administrators when listings are relisted or subscription statuses change. |
| Relist Records | A searchable log of all relist events showing listing name, type, old/new packages, author, and date. |
| Automatic Log Cleanup | A daily scheduled task automatically removes old relist records after the configured retention period. |
How It Works
When a Listing Expires or Subscription Ends
Instead of letting the listing become invisible, the plugin intercepts the expiration and:
1. Switches the listing to the configured free/basic package.
2. Sets the listing status back to published so it remains visible on the site.
3. Updates all listing metadata (package ID, product ID, duration, featured status, expiry).
4. Logs the relist event in the database.
5. Sends email notifications to selected administrators (if configured).
Trigger Events
| Event | What Happens |
|---|---|
| Listing status → expired | Immediately relists the listing on the basic package. |
| Subscription → cancelled | Immediately relists all listings tied to that subscription. |
| Subscription → expired | Immediately relists all listings tied to that subscription. |
| Subscription → on-hold | Relists after the configured delay period (or immediately if delay is 0 days). |
| Subscription → active (reactivated) | Reverses the relist — restores listings to the reactivated subscription’s original paid package. |
Note: The plugin checks whether a subscription is still active before relisting. If a listing expires but its subscription is still active, the plugin does nothing.
Settings Page
Navigate to Listing Relist in the WordPress admin sidebar to access the settings.
Enable / Disable
Option: Enable Relist Expired Listings?
Default: Yes
Toggle the plugin’s relist functionality on or off. When disabled, listings will behave according to the default MyListing behavior (expired listings become invisible).
Basic Package
Option: Basic Package (dropdown)
Select the WooCommerce product that listings should be switched to when they expire or their subscription ends.
Important — Basic Package requirements:
• It must be a Listing Package type (not a “Listing Subscription”).
• Its price must be set to 0 (free).
• It must be added to the Paid Listing packages for every listing type you want to support relisting. If the basic package is not valid for a listing type, relisting will be skipped for that type.
Delay Days
Option: Delay Days (number)
Default: 0
Range: 0–365
Set the number of days to wait before downgrading listings when a subscription status changes to on-hold. This gives users a grace period to fix payment issues before their listing is switched to the basic package.
| Value | Behavior |
|---|---|
0 | Listings are switched to the basic package immediately when the subscription goes on-hold. |
3 | The plugin waits 3 days. If the user reactivates within that time, their listings stay on the original package. |
7 | 7-day grace period before downgrading. |
Note: This delay only applies to on-hold status changes. Cancelled and expired subscriptions are always processed immediately.
Email Notifications
Option: Email Notifications (multi-select user list)
Select which WordPress users should receive email notifications when a listing is relisted or a subscription status changes. Leave empty to disable notifications. Multiple users can be selected.
Relist Log Days
Option: Relist Logs Days (number)
Default: 7
Range: 1–365
Set how many days to retain relist log records. A daily scheduled task automatically deletes records older than this number of days.
Relist Records
Navigate to Listing Relist → Relist Records in the admin sidebar to view a searchable log of all relist events.
| Column | Description |
|---|---|
| Listing Name | The title of the relisted listing (links to the edit page). |
| Listing Type | The MyListing listing type (e.g., “place,” “event”). |
| Old Package | The previous package ID and product name. Shows “Expired” if no previous package existed. |
| New Package | The new package ID and product name the listing was switched to. |
| Author | The listing owner’s display name (links to their user profile). |
| Relist Date | Date and time of the relist event. |
Use the search field to find records by listing name, listing type, or author name.
Email Notifications
When email notifications are configured, the plugin sends styled HTML emails for the following events:
| Event | Subject Line | Details |
|---|---|---|
| Listing Expired | {username}’s listing has expired | Informs that the listing expired and was switched to the basic package. Includes listing name, type, new package, and a link to view the listing. |
| Subscription Reactivated | {username} has reactivated their subscription | Details the package switch from the basic package back to the subscription’s original package. |
| Subscription Expired | {username}’s subscription has expired | Details the package switch to the basic package due to subscription expiration. |
| Subscription Cancelled | {username} has cancelled their subscription | Notes that the listing remains active after cancellation, with package switch details. |
| Subscription On-Hold | {username} has placed their subscription on hold | Details the package switch due to the on-hold status. |
All emails include a styled HTML template with your site name in the footer and a “View Listing” button linking directly to the listing.
Example Setup
1. Activate the plugin with the MyListing theme and a child theme active.
2. Create a free WooCommerce product for the basic package:
a. Go to Products → Add New.
b. Set the product type to Listing Package (not “Listing Subscription”).
c. Set the price to 0.
d. Configure the package settings (e.g., not featured, no verification, no expiry).
e. Publish the product.
3. Add the basic package to your listing types:
a. Go to each Listing Type you want to support relisting.
b. Add the free package product to the Paid Listing packages for that type.
c. Save each listing type.
4. Navigate to Listing Relist in the admin sidebar.
5. Ensure Enable Relist Expired Listings is set to Yes.
6. Select the free package you created in the Basic Package dropdown.
7. Set Delay Days to 3 to give users a 3-day grace period for on-hold subscriptions.
8. Select the admin users who should receive notifications in Email Notifications.
9. Set Relist Log Days to 30 to retain records for a month.
10. Save settings.
Now when a listing expires or a subscription ends, the listing automatically switches to the free package and stays published. When a subscription is reactivated, the listing is restored to its original paid package. All events are logged in Listing Relist → Relist Records and notification emails are sent to selected administrators.
Frequently Asked Questions
Does this require a child theme?
Yes. The plugin will not activate without a MyListing child theme.
Does this work with the Voxel theme?
No. This plugin is specifically designed for the MyListing theme by 27Starter.
What happens when a user reactivates their subscription?
The plugin automatically restores all associated listings to the subscription’s original paid package. The listings are re-published with the original package settings (duration, featured status, verification, etc.).
What if I don’t use WooCommerce Subscriptions?
The plugin still works for standard listing expirations — when a listing’s expiry date passes and MyListing sets it to “expired,” the plugin switches it to the basic package. The subscription-specific features simply won’t apply.
Can I set different basic packages for different listing types?
Currently, the plugin uses a single basic package for all listing types. However, the basic package must be added to the paid listing packages for each listing type you want to support. If the basic package is not valid for a listing type, relisting is skipped for that type.
What does the “Delay Days” setting do exactly?
It only applies to on-hold subscription status changes (e.g., when a payment fails). The plugin waits the specified number of days before switching listings to the basic package. If the user reactivates within the delay period, their listings remain on the original package. Cancelled and expired subscriptions are always processed immediately regardless of this setting.
Where can I see which listings were relisted?
Navigate to Listing Relist → Relist Records in the admin menu. You’ll see a searchable table of all relist events with the listing name, type, old/new packages, author, and date.
What happens when I deactivate the plugin?
All scheduled tasks are properly stopped. The database table and settings are preserved, so your data is still there if you reactivate the plugin later. While deactivated, listings will follow the default MyListing expiration behavior.
What are the requirements for the basic package product?
The basic package must be a Listing Package product type (not a “Listing Subscription”), its price must be 0 (free), and it must be added to the paid listing packages for every listing type you want to support relisting.
Does the plugin create any database tables?
Yes. The plugin creates one custom table to store relist event logs. This table is created automatically on activation and records are automatically cleaned up based on the configured retention period.
Troubleshooting
Listings Still Expiring (Not Being Relisted)
| Cause | Solution |
|---|---|
| Plugin disabled | Go to Listing Relist settings and ensure “Enable Relist Expired Listings” is set to Yes. |
| No basic package selected | Select a valid basic package in the Basic Package dropdown on the settings page. |
| Basic package not added to listing type | The basic package must be added to the Paid Listing packages for the listing type. If the package is not valid for a listing type, relisting is skipped. Go to each listing type and add the basic package. |
| Basic package is a Subscription type | The basic package must be a Listing Package type, not a “Listing Subscription.” Edit the WooCommerce product and change its type. |
| Basic package price is not 0 | The basic package must have a price of 0 (free). Edit the product and set the price to 0. |
| Plugin not activated | Go to Plugins → Installed Plugins and verify the plugin is active. |
Subscription Reactivation Not Restoring Original Package
| Cause | Solution |
|---|---|
| Subscription metadata missing | The plugin stores the original subscription ID on the listing when it’s relisted. If this metadata was manually deleted, the plugin cannot match listings back to the reactivated subscription. |
| Listing was manually reassigned | If you manually changed a listing’s package after it was relisted, the plugin may not restore it correctly on reactivation. |
Email Notifications Not Being Sent
| Cause | Solution |
|---|---|
| No users selected | Go to Listing Relist settings and select at least one user in the Email Notifications multi-select. |
| WordPress email not configured | The plugin uses WordPress’s wp_mail() function. Ensure your site can send emails (check with an SMTP plugin if needed). |
Relist Records Not Showing
| Cause | Solution |
|---|---|
| Records auto-deleted | Records older than the configured Relist Log Days value are automatically deleted daily. Increase the retention period in settings if you need records kept longer. |
| No relist events have occurred | Records only appear after a listing has been relisted. If no listings have expired since activation, the table will be empty. |
On-Hold Subscriptions Not Waiting for the Delay Period
| Cause | Solution |
|---|---|
| Delay Days set to 0 | A value of 0 means immediate processing. Set Delay Days to a higher value (e.g., 3 or 7) in the settings to enable the grace period. |
| WordPress cron not running | The delay uses WordPress scheduled tasks. If your site’s cron system isn’t running reliably, the delayed task may not fire on time. Consider using a server-level cron job to trigger wp-cron.php. |
“MyListing Theme Not Detected” or “Child Theme Not Detected” Error
The MyListing theme and a child theme must both be installed and active. Go to Appearance → Themes to verify.
For further support, visit codicts.com or contact us at support@codicts.com.