Goal
Let an app user claim a listing and pay for a subscription that is owned natively by GeoDirectory — so claiming, upgrading, downgrading, and cancelling all behave the same whether the user is on the web or in the app.
A claim purchase creates a native GeoDirectory pricing subscription. The money is collected by one of two rails you choose per app:
- Stripe — charged through the customer’s saved card (MAM Stripe).
- In-App Purchase (IAP) — charged by the App Store / Google Play.
This recipe covers everything you set in WordPress to make either rail work, plus the optional approval flow, the claim screen appearance, and the notifications.
Looking for how it works under the hood? See Form and flow: Claim Listing.
Prerequisites
- The third-party GeoDirectory Claim Listing add-on is active. (Without it the claim button never appears.)
- The third-party GeoDirectory Pricing Manager add-on is active, with its Cart set to “Invoicing” (GetPaid). This is what creates and owns the recurring subscription. (GeoDirectory → Settings → Pricing Manager → Cart.)
- The GetPaid / Invoicing plugin is active.
- For the Stripe rail: MAM Stripe Manager active and connected.
- For the IAP rail: MAM In-App Purchase Manager active, plus WooCommerce (it stores the IAP products).
Step 1 — Turn on claiming for the post type
Claiming is a GeoDirectory setting, not a MAM one. In GeoDirectory → Settings → Post Types → (your post type) → Claim, make sure claiming is enabled and the “Claimed” custom field is active for that post type. If the “Claimed” field is inactive, the claim button will not show on any listing of that type.
Step 2 — Create your claim packages
In GeoDirectory → Settings → Pricing Manager → Packages, create one package per tier you want to sell for the claimable post type (e.g. Monthly, Yearly).
For each package:
- Set the price and the recurring terms (interval + time unit). The interval label shown on the claim screen (e.g. “per month”) is derived from this.
- The package’s WooCommerce product (
woocommerce_product_id) is used as the product reference sent to the app. This is required for the IAP rail (the product’s SKU is the store product identifier) and harmless for Stripe.
If you plan to use the approval flow (Step 4), you must also create one free package (price 0) for the post type. Approved users are granted this free tier and upgrade later in the app.
Step 3 — Choose the checkout rail
On Mobile App Manager → Geodirectory → Claim Listing, set Checkout mode:
- Stripe — the app collects the card and charges through MAM Stripe.
- In-App Purchase — the app sends the user to the App Store / Play purchase sheet.
This is a per-app choice — the whole app uses one rail or the other; you cannot mix per package.
If you choose In-App Purchase but the MAM In-App Purchase Manager plugin is not active, the page shows a warning. Activate it before going live.
Extra setup for the In-App Purchase rail
- For each claim package’s WooCommerce product, tick the “In App Purchase” checkbox (added to the product editor by MAM In-App Purchase Manager) and give it a SKU and a Duration attribute that matches the package’s recurring period.
- Create the matching auto-renewable subscription products in App Store Connect and Google Play, using product identifiers that equal those SKUs. (Google uses the SKU with underscores swapped for hyphens.)
- Add sandbox / license testers for your test pass.
The App Store / Google Play own the renewal billing. MAM never charges an IAP subscription — it records the purchase and mirrors the store’s state. See Form and flow: Claim Listing for the lifecycle.
Step 4 — (Optional) Require admin approval
On Mobile App Manager → Geodirectory → Claim Listing, set Require admin approval to claim?
- No — the button reads Claim Listing and goes straight to purchase.
- Yes — the button reads Request to Claim. The user submits a request, you review it, and on approval they own the listing at the free tier (then upgrade in-app).
Approval mode requires a free package (Step 2). If none exists for the post type, the app safely falls back to direct purchase regardless of this toggle.
Approvals and rejections are handled in GeoDirectory’s own Claims dashboard (where pending claims list with Approve / Reject). You don’t need a separate MAM screen.
Step 5 — Style the claim screen
Still on Mobile App Manager → Geodirectory → Claim Listing, set the appearance values that are sent to the native claim screen:
| Setting | Controls |
|---|---|
| Call-to-action text | The headline above the packages |
| Claim features | A bulleted benefits list (one per line) |
| Background image / Background color | The screen background |
| CTA text color | The headline color |
| Package background / text color | The package cards |
| Price color | The price text |
| Button background / text color | The “Select” buttons |
Empty values fall back to the app’s built-in defaults.
Step 6 — Configure the notification templates
The claim flow sends notifications. Set their title/body templates under your MAM notification settings (the general settings tab). Available placeholders are shown in GeoDirectory notification types.
| Notification | Sent to | When |
|---|---|---|
| Listing Claimed | All admins | A listing is claimed/approved (any rail, app or web) |
| Claim Requested | All admins | A user submits a “Request to Claim” |
| Claim Request Approved | The claimant | An admin approves their request |
| Claim Request Rejected | The claimant | An admin rejects their request |
| Claim Subscription Lapsed | All admins | An IAP subscription lapses and there’s no free tier to fall back to |
Step 7 — Verify
- As a non-author, signed-in app user, open a claimable, unclaimed listing of the configured post type. The claim button should appear.
- Direct purchase: tap Claim Listing, pick a package, complete payment. Confirm in WordPress that you are now the listing’s author, the listing shows as claimed, and a pricing subscription exists.
- Approval mode: tap Request to Claim. Confirm a pending claim appears in the GeoDirectory Claims dashboard and admins receive the “Claim Requested” notification. Approve it; confirm the user becomes the owner at the free tier and receives the “Approved” notification.
- IAP rail: complete a sandbox purchase and confirm the claim completes the same way as Stripe.
Troubleshooting
| Symptom | Likely cause |
|---|---|
| Claim button never appears | Claiming/Claimed field not enabled for the post type (Step 1), or the Claim add-on is inactive. |
| “Could not create the claim invoice…” | Pricing Manager Cart is not set to Invoicing (GetPaid), or the package isn’t a valid claim package. |
| “No GetPaid invoice was created…” | Same as above — the Invoicing cart isn’t active. |
| “Payment gateway not available” | The matching gateway didn’t load — confirm GetPaid is active (Stripe rail) or MAM In-App Purchase Manager is active (IAP rail). |
| “No saved payment method” (Stripe) | The user hasn’t added a card. |
| Approval toggle seems ignored | No free package exists for the post type, so it falls back to direct purchase (Step 4). |
Related articles
- Form and flow: Claim Listing — theory of operation
- Recipe: Configure the GeoDirectory settings page
- Recipe: Pricing package fields
- Integration: In-App Purchase Manager
- GeoDirectory notification types
Metadata
| Field | Value |
|---|---|
| Article type | Recipe (Admin) |
| Plugin slug | mam-geodirectory |
| Applies to plugin version | 26.26.0+ |
| Category | Building Your App |
| Audience | WordPress admin |
| Estimated time | 30–45 minutes |
