Listings Manager for Listeo: Developer Guide
Technical guide for safe customizations around listing meta, AJAX endpoints, shortcodes, AI workflows, image workflows, and rate-limited integrations.
Architecture overview
The plugin extends WordPress Admin and Listeo listing workflows. It provides admin screens for listing operations, settings, support, updates, API usage, ScraperAPI, ExtractPics, and license status. It also exposes frontend management shortcodes for controlled listing management screens.
LLM_.[llm_listings_manager] and [listeo_listings_manager].Do not override licensing
Custom work must not modify, replace, intercept, or fake the plugin license, update, entitlement, or remote validation logic. Do not hook into license AJAX actions, REST license routes, update checks, or stored license options to make an inactive license appear active. Keep client customizations limited to presentation, workflow, filters, permission policy, and data handling.
Important listing meta
The manager reads and writes common Listeo fields. If your customization also writes these fields, coordinate save order and sanitization to avoid overwriting operator edits.
| Meta key | Purpose |
|---|---|
_phone, _email, _website | Contact fields used in the manager, AI context, and image workflows. |
_place_id, _address, _friendly_address | Google/Listeo location identity and display address data. |
_geolocation_lat, _geolocation_long | Coordinates used for location-aware workflows. |
_listing_logo, _featured_image, _gallery | Logo, featured image, and gallery data. |
_verified | Listing verification flag. |
_ai_instructions | Custom instruction context used by AI generation features. |
_{day}_opening_hour, _{day}_closing_hour | Listeo opening-hour arrays or values for each day. |
AJAX endpoints
The plugin uses authenticated WordPress AJAX actions for edits and integrations. Do not call them from public unauthenticated code. When extending workflows, preserve nonce checks, capability checks, sanitization, and response shapes expected by the existing JavaScript.
| Area | Actions |
|---|---|
| Post fields | llm_update_title, llm_update_slug, llm_update_categories, llm_update_description, llm_update_excerpt, llm_update_meta |
| Hours | llm_save_opening_hours |
| Images | llm_set_images, llm_update_logo, llm_fetch_logo, llm_scrape_images, llm_set_featured_image, llm_add_to_gallery, llm_refresh_gallery |
| External services | llm_scraperapi_fetch_logo, llm_scraperapi_scrape_images, llm_scraperapi_test_connection, llm_extractpics_test_connection |
| Usage | llm_usage_track, llm_usage_query, llm_usage_summary, llm_usage_export |
REST route
The plugin registers a license update route under llm/v1/license-update. This route belongs to ListingPilot license infrastructure and should not be used as a customization point. For custom integrations, create your own namespace instead of extending or shadowing license routes.
Shortcode customization
The frontend manager can be rendered through [llm_listings_manager] or [listeo_listings_manager]. If you need custom page layout, wrap the shortcode in a theme template or builder section and apply CSS scoped to that page. Avoid editing plugin PHP templates directly unless you maintain a documented deployment patch.
Admin capability
Keep the manager restricted to trusted users. If you reduce capabilities, audit every field that becomes editable. The screen can update contact details, publication data, images, social links, address details, and schedule data, so it should not be exposed to untrusted roles without additional review.
AI and external service integrations
AI, ScraperAPI, ExtractPics, and Google-related workflows are operational integrations, not theme templates. When extending them, keep provider credentials server-side, never expose API keys in frontend JavaScript, and preserve rate-limit behavior. The plugin includes Google API blocking and limit hooks such as llm_google_api_blocked and llm_google_api_limit_reached for monitoring.
Safe customization examples
- Add CSS to align the frontend shortcode with your child theme.
- Add admin-only helper text around the shortcode page.
- Create a separate reporting page that reads listing meta without modifying plugin internals.
- Listen to rate-limit actions for logging or alerting.
- Use WordPress roles and capabilities to control which operators access the manager.
Regression test checklist
- Inline title, slug, category, description, and excerpt edits still save.
- Contact meta and social meta save with sanitization.
- Logo, gallery, and featured image flows work after cache/minification.
- Opening hours render correctly on public listing pages.
- AI and external API failures show clear errors and do not corrupt listing data.
- License and update screens remain untouched and functional.