Paid listings and packages
MyListing uses WooCommerce products as listing plans. Buying or receiving a plan creates a user package; assigning that package applies its capacity, duration, priority, verification, and claim settings to a listing.
Global submission settings
Section titled “Global submission settings”Open Listings → Settings. These settings are on one screen; General and Claim Listings are section headings, not submenu pages.
| Setting | Theme default | Effect |
|---|---|---|
| Enable Paid Listings | On | Adds the package-selection and WooCommerce purchase flow. An account is always required while this is enabled. |
| Require an account to submit listings | On | Requires login for ordinary submissions. Paid submissions require an account regardless of this value. |
| Require admin approval of all new listing submissions | On | Sends new listings to Pending instead of publishing them immediately. |
| Allow editing of pending listings | Off | Lets an owner continue editing while a listing awaits approval. |
| Allow editing of published listings | Users can edit without admin approval | Can instead moderate edits or prevent them. |
| Allow switching listing package | Users can switch without admin approval | Can instead moderate a switched listing or disable customer switching. This setting also controls the paid-listing relist action. |
| Listing Duration | 30 days | Supplies the fallback duration when a package has no duration. Leave both the package duration and this global value blank for no date-based expiry. |
Create a Listing Package product
Section titled “Create a Listing Package product”- Go to Products → Add New and set Product data to Listing Package.
- Enter the regular price. MyListing makes this product virtual and sold individually.
- Configure the listing-package options described below and publish the product.
- Optionally add a Pricing Plan Image in the Product Settings panel. It appears in the pricing-plan step.
- Go to Listing Types, edit the applicable type, and open General → Packages.
- Enable Enable paid listing packages, drag the product into the active list, and set its customer-facing Label, Description, and optional Featured? highlight. Drag active products to set their display order, then update the type.
Do not leave the active package list empty to mean “no packages.” Disable Enable paid listing packages when the type should use the normal free-submission flow.
Product settings
Section titled “Product settings”| Field | Behavior |
|---|---|
| Listing limit | Maximum assignments from the user package. Blank means unlimited. |
| Add listing limit by listing type | Adds per-type caps. Their combined values cannot exceed the main listing limit. A type without a per-type allocation cannot use that package once per-type limits are configured. |
| Listing duration | Days before an assigned listing expires. Blank inherits Listings → Settings → Listing Duration; it does not independently mean unlimited. |
| Feature Listings? | Assigns Featured priority (1). |
| Mark as verified? | Applies the verified badge when the package is assigned. |
| Use for Claim? | Lets the package appear in the claim flow. |
| Don’t use for add listing? | Hides the package from add-listing and plan-switch screens, which is useful for a claim-only product. |
| Disable repeat purchase? | Prevents a logged-in customer who has already bought the product from buying it again. |
| Is claimable? | Allows listings created with this package to remain eligible for a later ownership claim. This is different from Use for Claim?. |
Package visibility rules use the WooCommerce product ID, not the user-package record created from it.
Submission and checkout lifecycle
Section titled “Submission and checkout lifecycle”For a new paid submission, the customer selects a plan, completes the listing form and preview, and then goes to WooCommerce. MyListing sets the listing to pending_payment before checkout. If the cart already contains another item, the customer is sent to the cart; otherwise the flow can go directly to checkout. Checkout requires an account and disables guest checkout when it contains a listing package.
MyListing processes a paid package when the order reaches Processing or Completed. It creates the user package once, assigns it to the listing, and then publishes the listing or leaves it Pending according to the approval setting. This is why an order does not have to reach Completed when a payment method correctly uses Processing for paid virtual orders.
Review the payment under WooCommerce → Orders and the resulting package under Users → Paid Listing Packages. A one-time package stores a snapshot of the product’s main limit, duration, and benefits when it is created, so later product edits do not rewrite those user-package fields. Per-type validation and visibility still refer to the source product and listing-type configuration. A cancelled order marks its associated package Order Cancelled.
Free, reusable, and exhausted packages
Section titled “Free, reusable, and exhausted packages”A zero-priced package normally skips WooCommerce checkout and is created and assigned immediately. There is one important exception: when Disable repeat purchase? is enabled, MyListing sends even a zero-priced product through checkout so WooCommerce purchase history can enforce the one-purchase rule. Developers can also change the default skip behavior with the mylisting\packages\free\skip-checkout filter.
An active package with remaining capacity appears as Use Available Package on later submissions. Selecting it bypasses another purchase. Blank Listing limit means unlimited; otherwise each assignment increases the package count. Per-type limits are enforced separately. Expired listings do not consume a per-type allocation, while Publish, Pending, Pending Approval, Pending Payment, Unpublish, and Draft listings do.
When the total allowance is exhausted, the package is marked Full. An administrator can inspect or correct its count and settings under Users → Paid Listing Packages.
Switching plans, relisting, and renewal
Section titled “Switching plans, relisting, and renewal”Owners manage listings under My Account → My Listings:
- A published listing can show Switch Plan. The customer selects an eligible plan, edits the listing if needed, and completes the same available-package, free-package, or checkout flow. The global switching setting decides whether the reassigned listing publishes immediately, returns to Pending, or cannot be switched.
- An expired listing can show Relist. Relisting resets its post date, lets the owner edit it, and assigns a new or available package. The global submission-approval setting decides whether it publishes or returns to Pending. One-time packages do not renew automatically.
- When paid listings are disabled, an expired listing can still be relisted without a package. It uses the global duration and submission-approval settings.
An administrator can open Listings → All Listings, edit a listing, and use the Package panel to change or remove its assigned user package. The theme recalculates the relevant package counts and listing expiry after a confirmed change.
Migrating old WC Paid Listings packages
Section titled “Migrating old WC Paid Listings packages”MyListing detects compatible legacy package data from the WP Job Manager WooCommerce Paid Listings plugin. When found, Users → Paid Listing Packages displays Old WC Paid Listing data found. Start data migration.
Back up the database before starting. The importer creates MyListing user-package records and updates listings that referenced the old package IDs. It is resumable and does not delete the old package-table rows by default. Developers can force detection with mylisting/paid-listings/force-run-wcpl-migration or opt into deleting migrated legacy rows with case27_paid_listing_migrate_wpcl_delete_old_db.
Lifecycle hooks
Section titled “Lifecycle hooks”mylisting/submission/order-placedruns after a paid listing order has been processed.mylisting/payments/submission/order-processed,mylisting/payments/switch/order-processed, andmylisting/payments/relist/order-processedidentify the processed assignment flow.mylisting/switched-packageruns after a listing moves to its new package.mylisting/paid-listing/enable-switch-packagecan disable registration of the switch/relist controller.mylisting/display-switch-actionfilters the paid switch/relist action;mylisting/display-relist-actionfilters package-free relisting when paid listings are disabled.
