Hooks Reference (Actions & Filters)
Every Listora action and filter, grounded in the current manifest at audit/manifest.json (refreshed 2026-06-06 for 1.1.0). The plugin fires 233 hooks across the categories below - 122 actions + 111 filters. Pro consumes a subset of these; the Consumed by column lists every Pro listener so you can see at a glance which hooks already have wiring.
Generated from audit/manifest.json. Re-run /wp-plugin-onboard --refresh after non-trivial commits to regenerate.
Naming convention
wb_listora_before_{action}_{resource}- write-lifecycle filter; returnWP_Errorto abort the write.wb_listora_after_{action}_{resource}- write-lifecycle action; canonical extension point.wb_listora_rest_prepare_{resource}- modify REST response shape; receives($data, $context, $request).wb_listora_{event}- domain event (e.g.wb_listora_listing_submitted).
Bootstrap (2)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_loaded |
action | (none) | class-plugin.php:49 |
wb-listora-pro |
wb_listora_rest_api_init |
action | (none) | class-plugin.php:251 |
wb-listora-pro |
Listings - Write-Lifecycle (25)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_approve_listing |
action | `WP_Post | int $post->ID` | wb-listora.php:406 |
wb_listora_after_bulk_moderate |
action | string $action, array $ok, array $failed |
rest/class-listings-controller.php:531 |
- |
wb_listora_after_contact_form_submit |
action | int $listing_id, array $context, WP_REST_Request $request |
class-contact-form.php:253 |
- |
wb_listora_after_create_listing |
action | int $post_id, WP_REST_Request $request |
rest/class-submission-controller.php:512 |
wb-listora-pro |
wb_listora_after_dashboard_listings |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-listings.php:404 |
- |
wb_listora_after_deactivate_listing |
action | int $post_id, WP_REST_Request $request |
rest/class-listings-controller.php:970 |
- |
wb_listora_after_delete_listing |
action | int $post_id, WP_REST_Request $request |
rest/class-listings-controller.php:876 |
wb-listora-pro |
wb_listora_after_feature_listing |
action | int $post_id, mixed($context) $context |
core/class-featured.php:179 |
- |
wb_listora_after_featured_listings |
action | mixed($featured_block_attributes) $featured_block_attributes |
blocks/listing-featured/render.php:96 |
- |
wb_listora_after_listing_fields |
action | int $post_id, mixed($detail_type_slug) $detail_type_slug |
templates/blocks/listing-detail/sidebar.php:70 |
wb-listora-pro |
wb_listora_after_listing_grid |
action | mixed($grid_block_attributes) $grid_block_attributes |
blocks/listing-grid/render.php:216 |
- |
wb_listora_after_reactivate_listing |
action | int $post_id, WP_REST_Request $request |
rest/class-listings-controller.php:1106 |
- |
wb_listora_after_reject_listing |
action | `WP_Post | int $post->ID` | wb-listora.php:410 |
wb_listora_after_renew_listing |
action | int $post_id, mixed |
rest/class-listings-controller.php:1562 |
wb-listora-pro |
wb_listora_after_unfeature_listing |
action | int $post_id, mixed($reason) $reason |
core/class-featured.php:228 |
- |
wb_listora_after_update_listing |
action | int $post_id, WP_REST_Request $request |
rest/class-submission-controller.php:676 |
wb-listora-pro |
wb_listora_before_create_listing |
filter | bool, mixed($title) $title, WP_REST_Request $request |
rest/class-submission-controller.php:405 |
- |
wb_listora_before_dashboard_listings |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-listings.php:24 |
- |
wb_listora_before_delete_listing |
filter | bool, int $post_id, WP_REST_Request $request |
rest/class-listings-controller.php:843 |
- |
wb_listora_before_feature_listing |
filter | bool, int $post_id, mixed($context) $context |
core/class-featured.php:156 |
- |
wb_listora_before_featured_listings |
action | mixed($featured_block_attributes) $featured_block_attributes |
blocks/listing-featured/render.php:75 |
- |
wb_listora_before_listing_grid |
action | mixed($grid_block_attributes) $grid_block_attributes |
blocks/listing-grid/render.php:209 |
- |
wb_listora_before_renew_listing |
filter | bool, int $post_id, mixed($context) $context |
rest/class-listings-controller.php:1469 |
wb-listora-pro |
wb_listora_before_unfeature_listing |
filter | bool, int $post_id, mixed($context) $context |
core/class-featured.php:214 |
- |
wb_listora_before_update_listing |
filter | bool, int $post_id, WP_REST_Request $request |
rest/class-submission-controller.php:584 |
- |
Reviews - Write-Lifecycle (10)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_create_review |
action | int $review_id, int $listing_id, WP_REST_Request $request |
rest/class-reviews-controller.php:533 |
wb-listora-pro |
wb_listora_after_dashboard_reviews |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-reviews.php:80 |
- |
wb_listora_after_delete_review |
action | int $review_id, int $review ? (int) $review->listing_id : null, WP… |
rest/class-reviews-controller.php:682 |
wb-listora-pro |
wb_listora_after_reviews |
action | mixed($view_data) $view_data |
templates/blocks/listing-reviews/reviews.php:128 |
- |
wb_listora_after_update_review |
action | int $review_id, WP_REST_Request $request |
rest/class-reviews-controller.php:615 |
wb-listora-pro |
wb_listora_before_create_review |
filter | bool, int $listing_id, WP_REST_Request $request |
rest/class-reviews-controller.php:455 |
- |
wb_listora_before_dashboard_reviews |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-reviews.php:20 |
- |
wb_listora_before_delete_review |
filter | bool, int $review_id, WP_REST_Request $request |
rest/class-reviews-controller.php:649 |
- |
wb_listora_before_reviews |
action | mixed($view_data) $view_data |
templates/blocks/listing-reviews/reviews.php:31 |
- |
wb_listora_before_update_review |
filter | bool, int $review_id, WP_REST_Request $request |
rest/class-reviews-controller.php:573 |
- |
Favorites - Write-Lifecycle (4)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_add_favorite |
action | int $listing_id, int $user_id, WP_REST_Request $request |
rest/class-favorites-controller.php:258 |
wb-listora-pro |
wb_listora_after_remove_favorite |
action | int $listing_id, int $user_id, WP_REST_Request $request |
rest/class-favorites-controller.php:316 |
wb-listora-pro |
wb_listora_before_add_favorite |
filter | bool, int $listing_id, WP_REST_Request $request |
rest/class-favorites-controller.php:205 |
- |
wb_listora_before_remove_favorite |
filter | bool, int $listing_id, WP_REST_Request $request |
rest/class-favorites-controller.php:290 |
- |
Claims - Write-Lifecycle (6)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_dashboard_claims |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-claims.php:123 |
- |
wb_listora_after_submit_claim |
action | int $claim_id, int $listing_id, WP_REST_Request $request |
rest/class-claims-controller.php:219 |
wb-listora-pro |
wb_listora_after_update_claim |
action | int $claim_id, mixed($new_status) $new_status, WP_REST_Request $re… |
rest/class-claims-controller.php:549 |
wb-listora-pro |
wb_listora_before_dashboard_claims |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-claims.php:36 |
- |
wb_listora_before_submit_claim |
filter | bool, int $listing_id, WP_REST_Request $request |
rest/class-claims-controller.php:169 |
- |
wb_listora_before_update_claim |
filter | bool, int $claim_id, WP_REST_Request $request |
rest/class-claims-controller.php:481 |
- |
Services - Write-Lifecycle (7)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_create_service |
action | `int $service_id, array | mixed $data` | core/class-services.php:196 |
wb_listora_after_delete_service |
action | int $service_id, mixed($existing) $existing |
core/class-services.php:342 |
wb-listora-pro |
wb_listora_after_service_detail |
action | mixed $svc, mixed $post_id, mixed $show_reviews, mixed $detail_rev… |
templates/blocks/listing-detail/tabs.php:313 |
- |
wb_listora_after_update_service |
action | `int $service_id, array | mixed $data` | core/class-services.php:289 |
wb_listora_before_create_service |
filter | `array | mixed $data` | core/class-services.php:117 |
wb_listora_before_delete_service |
filter | int $service_id |
core/class-services.php:316 |
- |
wb_listora_before_update_service |
filter | `array | mixed $data, int $service_id` | core/class-services.php:227 |
Listing Lifecycle Events (28)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_claim_submitted |
action | int $claim_id, int $listing_id, int $user_id |
rest/class-claims-controller.php:210 |
- |
wb_listora_contact_form_per_listing_daily_cap |
filter | int $cap, int $listing_id |
class-contact-form.php:198 |
- |
wb_listora_expired_listing_notice |
filter | mixed($message) $message, mixed |
class-plugin.php:432 |
- |
wb_listora_is_verified |
filter | bool $verified, int $post_id |
class-features.php:232 |
wb-listora-pro |
wb_listora_listing_claimed |
action | int $listing_id, array $context |
rest/class-claims-controller.php:512 |
wb-listora-pro |
wb_listora_listing_expiration_date |
filter | string $expiry_iso, int $post_id, array $context |
workflow/class-status-manager.php:99,118; rest/class-listings-controller.php:1654 |
wb-listora-pro |
wb_listora_listing_expired |
action | int $post_id |
workflow/class-expiration-cron.php:169 |
wb-listora-pro |
wb_listora_listing_expiring |
action | int, mixed($days) $days |
admin/class-listing-columns.php:524 |
- |
wb_listora_listing_indexed |
action | int $post_id |
search/class-search-indexer.php:224 |
- |
wb_listora_listing_limit_counted_statuses |
filter | array |
core/class-listing-limits.php:430 |
- |
wb_listora_listing_limit_overflow |
action | int $user_id, mixed($overflow_cost) $overflow_cost |
core/class-listing-limits.php:255 |
- |
wb_listora_listing_pending_admin |
action | int $post_id |
admin/class-listing-columns.php:472 |
- |
wb_listora_listing_renewed |
action | int $post_id |
rest/class-listings-controller.php:1572 |
- |
wb_listora_listing_reported |
action | mixed $listing_id, mixed $report, mixed $reports, mixed $request |
rest/class-listings-controller.php:1387 |
- |
wb_listora_listing_reports_cleared |
action | mixed $post_id |
admin/class-report-metabox.php:185 |
- |
wb_listora_listing_status_changed |
action | `WP_Post | int $post->ID, mixed($new) $new, mixed($old) $old` | search/class-search-indexer.php:553 |
wb_listora_listing_submitted |
action | int $post_id, mixed($new_status) $new_status, mixed($synthetic_req… |
admin/class-listing-columns.php:470 |
wb-listora-pro |
wb_listora_listing_title_badges |
action | int $post_id, mixed($type ? $type->get_slug() : '') $type ? $type-… |
blocks/listing-detail/render.php:275 |
wb-listora-pro |
wb_listora_listing_trashed |
action | int $post_id, mixed |
rest/class-listings-controller.php:868 |
- |
wb_listora_listing_updated |
action | int $post_id, mixed, WP_REST_Request $request |
rest/class-submission-controller.php:668 |
- |
wb_listora_listing_verify_email |
action | int $post_id, mixed($token) $token |
workflow/class-email-verification.php:223 |
Deprecated in 1.3.0 with guest submission; no longer fired. |
wb_listora_listing_{$new_status} |
action | mixed $new_status, mixed $old_status, mixed $post_id, mixed $regis… |
workflow/class-status-manager.php:98 |
- |
wb_listora_register_listing_types |
action | mixed($this) $this |
core/class-listing-type-registry.php:78 |
- |
wb_listora_rest_listing_response |
filter | `mixed($listing) $listing, WP_Post | int $post` | rest/class-search-controller.php:461 |
wb_listora_review_status_changed |
action | int $review_id, string $status, int $listing_id |
rest/class-reviews-controller.php:650 |
- |
wb_listora_review_submitted |
action | int $review_id, int $listing_id, int $user_id, mixed($criteria_rat… |
rest/class-reviews-controller.php:524 |
wb-listora-pro |
wb_listora_unverified_listing_cleaned |
action | int $post_id, mixed($action) $action |
workflow/class-email-verification.php:544 |
Deprecated in 1.3.0 with guest submission; no longer fired. |
wb_listora_user_listing_limit |
filter | mixed($best) $best, int $user_id |
core/class-listing-limits.php:382 |
- |
Review Events (5)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_review_after_content |
action | mixed($review) $review |
templates/blocks/listing-reviews/review-card.php:54 |
wb-listora-pro |
wb_listora_review_criteria |
filter | array, mixed($listing_type_slug) $listing_type_slug |
blocks/listing-reviews/render.php:78 |
wb-listora-pro |
wb_listora_review_form_after_content |
action | int $post_id |
templates/blocks/listing-detail/tabs.php:399 |
wb-listora-pro |
wb_listora_review_helpful_milestone |
action | int $review_id, mixed($new_count) $new_count |
rest/class-reviews-controller.php:772 |
- |
wb_listora_review_reply |
action | int $review_id |
rest/class-reviews-controller.php:807 |
- |
REST Response Filters (8)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_rest_prepare_claim |
filter | mixed($response_data) $response_data, int $claim_id, WP_REST_Reque… |
rest/class-claims-controller.php:238 |
- |
wb_listora_rest_prepare_dashboard_stats |
filter | `array | mixed $data, int $user_id, WP_REST_Request $request` | rest/class-dashboard-controller.php:284 |
wb_listora_rest_prepare_favorite |
filter | mixed($fav_data) $fav_data, int, WP_REST_Request $request |
rest/class-favorites-controller.php:155 |
- |
wb_listora_rest_prepare_listing |
filter | `array | mixed $data, WP_Post | int $post, WP_REST_Request $request` |
wb_listora_rest_prepare_listing_type |
filter | mixed($type_data) $type_data, mixed($type) $type, WP_REST_Request … |
rest/class-listing-types-controller.php:152 |
- |
wb_listora_rest_prepare_review |
filter | mixed($review_data) $review_data, int, WP_REST_Request $request |
rest/class-reviews-controller.php:342 |
wb-listora-pro |
wb_listora_rest_prepare_search_result |
filter | mixed($response_data) $response_data, WP_REST_Request $request |
rest/class-search-controller.php:290 |
wb-listora-pro |
wb_listora_rest_prepare_service |
filter | `array | mixed $data, int, WP_REST_Request $request` | rest/class-services-controller.php:421 |
Block Render (45)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_card |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card.php:66 |
- |
wb_listora_after_card_actions |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-actions.php:29 |
- |
wb_listora_after_card_content |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-content.php:130 |
- |
wb_listora_after_card_image |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-image.php:75 |
- |
wb_listora_after_dashboard_credits |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-credits.php:218 |
- |
wb_listora_after_dashboard_nav |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/nav.php:113 |
- |
wb_listora_after_dashboard_profile |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-profile.php:86 |
- |
wb_listora_after_detail_gallery |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/gallery.php:67 |
- |
wb_listora_after_detail_sidebar |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/sidebar.php:83 |
- |
wb_listora_after_detail_tabs |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/tabs.php:464 |
- |
wb_listora_after_listing_card |
action | mixed $id, mixed $layout, mixed $show_rating, mixed $show_favorite… |
blocks/listing-card/render.php:197 |
- |
wb_listora_before_card |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card.php:43 |
- |
wb_listora_before_card_actions |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-actions.php:18 |
- |
wb_listora_before_card_content |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-content.php:31 |
- |
wb_listora_before_card_image |
action | mixed($view_data) $view_data |
templates/blocks/listing-card/card-image.php:27 |
- |
wb_listora_before_dashboard_credits |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-credits.php:24 |
- |
wb_listora_before_dashboard_nav |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/nav.php:29 |
- |
wb_listora_before_dashboard_profile |
action | mixed($view_data) $view_data |
templates/blocks/user-dashboard/tab-profile.php:19 |
- |
wb_listora_before_detail_gallery |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/gallery.php:26 |
- |
wb_listora_before_detail_sidebar |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/sidebar.php:24 |
- |
wb_listora_before_detail_tabs |
action | mixed($view_data) $view_data |
templates/blocks/listing-detail/tabs.php:39 |
- |
wb_listora_before_listing_card |
action | mixed $id, mixed $layout, mixed $show_rating, mixed $show_favorite… |
blocks/listing-card/render.php:174 |
- |
wb_listora_calendar_events |
filter | mixed($events) $events, mixed($attributes) $attributes |
blocks/listing-calendar/render.php:125 |
- |
wb_listora_card_actions |
action | `int | string $id` | templates/blocks/listing-card/card-actions.php:27 |
wb_listora_card_view_data |
filter | `mixed($card_data) $card_data, int $post_id, WP_Post | int $post` | class-template-helpers.php:517 |
wb_listora_category_card_data |
filter | array, mixed($cat) $cat |
templates/blocks/listing-categories/categories.php:49 |
- |
wb_listora_dashboard_header_actions |
action | mixed $user_id, mixed $user, mixed $default_tab |
blocks/user-dashboard/render.php:530 |
- |
wb_listora_dashboard_nav_items |
action | int $user_id |
templates/blocks/user-dashboard/nav.php:109 |
wb-listora-pro |
wb_listora_dashboard_sections |
action | int $user_id |
blocks/user-dashboard/render.php:660 |
wb-listora-pro |
wb_listora_dashboard_url |
filter | mixed($default) $default |
class-template-helpers.php:236 |
- |
wb_listora_detail_actions |
action | int $post_id |
blocks/listing-detail/render.php:340 |
wb-listora-pro |
wb_listora_detail_owner_bar_actions |
action | mixed $breadcrumbs, mixed $i, mixed $crumb |
blocks/listing-detail/render.php:381 |
- |
wb_listora_detail_reviews_limit |
filter | int, int $post_id |
blocks/listing-detail/render.php:424 |
- |
wb_listora_detail_tabs_view_data |
filter | mixed($tabs_view_data) $tabs_view_data, int $post_id |
blocks/listing-detail/render.php:479 |
- |
wb_listora_grid_after_card |
action | mixed($listing['id']) $listing['id'], mixed($grid_block_attributes… |
templates/blocks/listing-grid/grid.php:71 |
- |
wb_listora_grid_query_args |
filter | mixed($search_args) $search_args, mixed($attributes) $attributes |
blocks/listing-grid/render.php:95 |
- |
wb_listora_map_config |
filter | mixed($map_config) $map_config |
blocks/listing-map/render.php:113 |
wb-listora-pro |
wb_listora_map_provider |
filter | string $value |
wb-listora.php:288 |
wb-listora-pro |
wb_listora_search_after_form |
action | mixed $layout, mixed $listing_type, mixed $search_url_keyword, mix… |
blocks/listing-search/render.php:210 |
- |
wb_listora_search_before_form |
action | mixed $layout, mixed $listing_type, mixed $search_url_keyword, mix… |
blocks/listing-search/render.php:190 |
- |
wb_listora_submission_captcha |
action | int $form_id |
class-captcha.php:106 |
- |
wb_listora_submission_login_buttons |
action | (none) | templates/blocks/listing-submission/submission.php:67 |
- |
wb_listora_submission_plan_step |
action | mixed($listing_type) $listing_type |
templates/blocks/listing-submission/submission.php:111 |
wb-listora-pro |
wb_listora_submission_register_url |
filter | mixed $submission_register_url, mixed $submission_current_permalin… |
blocks/listing-submission/render.php:125 |
- |
wb_listora_submission_steps |
filter | mixed($steps) $steps, mixed($listing_type) $listing_type, mixed($i… |
blocks/listing-submission/render.php:165 |
wb-listora-pro |
Search & Submission (3)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_edit_auto_single_form |
filter | mixed $auto_single, mixed $edit_listing_id, mixed $layout_mode, mi… |
blocks/listing-submission/render.php:287 |
- |
wb_listora_search_args |
filter | array $args, WP_REST_Request $request |
rest/class-search-controller.php:252 |
wb-listora-pro |
wb_listora_search_results |
filter | mixed($response_data) $response_data, array $args, WP_REST_Request… |
rest/class-search-controller.php:282 |
- |
Settings & Admin (17)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_reset_settings |
action | array $option_keys |
rest/class-settings-controller.php:371 |
wb-listora-pro |
wb_listora_docs_url |
filter | string $url, string $tab_id, string $section |
admin/class-settings-page.php:377 |
- |
wb_listora_feature_duration_days |
filter | mixed($days) $days, int $post_id |
core/class-featured.php:140 |
- |
wb_listora_features_category_labels |
filter | array<string,string> $labels |
class-features.php:178 |
wb-listora-pro |
wb_listora_feature_{$key}_enabled |
filter | mixed $key, mixed $enabled, mixed $features |
class-features.php:182 |
- |
wb_listora_field_default_descriptions |
filter | mixed $default_descriptions, mixed $key, mixed $description, mixed… |
submission-field-renderer.php:76 |
- |
wb_listora_field_sanitize_callbacks |
filter | mixed($callbacks) $callbacks |
core/class-field.php:247 |
- |
wb_listora_field_types |
filter | mixed($types) $types |
core/class-field-registry.php:208 |
- |
wb_listora_has_payment_gateway |
filter | mixed $has_payment_gateway, mixed $user_id, mixed $credit_mappings… |
blocks/user-dashboard/render.php:300 |
- |
wb_listora_is_admin_screen |
filter | mixed $is_listora, mixed $screen |
class-template-helpers.php:748 |
- |
wb_listora_list_page_slugs |
filter | mixed $list_pages |
admin/class-admin.php:213 |
- |
wb_listora_register_field_types |
action | mixed($this) $this |
core/class-field-registry.php:54 |
- |
wb_listora_save_features_extra |
action | array<string,bool> $posted_features |
admin/class-settings-page.php:2342 |
wb-listora-pro |
wb_listora_seo_plugin_active |
filter | bool $active |
class-features.php:354 |
- |
wb_listora_settings_nav_groups |
filter | mixed($groups) $groups |
admin/class-settings-page.php:288 |
wb-listora-pro |
wb_listora_settings_skip_form_tabs |
filter | array |
admin/class-settings-page.php:377 |
wb-listora-pro |
wb_listora_settings_tab_content |
action | int $tab_id |
admin/class-settings-page.php:469 |
wb-listora-pro |
wb_listora_settings_tab_content_after_form |
action | mixed $tab_id, mixed $skip_form_tabs, mixed $groups, mixed $group,… |
admin/class-settings-page.php:565 |
- |
wb_listora_settings_tabs |
filter | mixed($tabs) $tabs |
admin/class-settings-page.php:311 |
wb-listora-pro |
wb_listora_skip_admin_header |
filter | mixed $screen, mixed $submenu, mixed $title, mixed $plugin, mixed … |
admin/class-admin.php:2057 |
- |
wb_listora_theme_bridges |
filter | mixed $bridges, mixed $bridge_slug, mixed $child_theme, mixed $act… |
class-assets.php:100 |
- |
Notifications & Email (15)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_contact_form_email_headers |
filter | array $headers, WP_Post $post |
class-contact-form.php:239 |
- |
wb_listora_email_content |
filter | mixed($body) $body, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:907 |
- |
wb_listora_email_content_{$event} |
filter | mixed $body, mixed $event, mixed $vars, mixed $to, mixed $headers |
workflow/class-notifications.php:1099 |
- |
wb_listora_email_footer_text |
filter | string, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:881 |
- |
wb_listora_email_from_address |
filter | mixed, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:941 |
- |
wb_listora_email_from_name |
filter | mixed($site_name) $site_name, mixed($event) $event, mixed($vars) $… |
workflow/class-notifications.php:933 |
- |
wb_listora_email_headers |
filter | mixed($headers) $headers, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:949 |
- |
wb_listora_email_logo_url |
filter | string, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:870 |
- |
wb_listora_email_palette |
filter | array |
workflow/class-notifications.php:1064 |
- |
wb_listora_email_subject |
filter | mixed($subject) $subject, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:891 |
- |
wb_listora_email_subject_{$event} |
filter | mixed $subject, mixed $event, mixed $vars, mixed $body |
workflow/class-notifications.php:1084 |
- |
wb_listora_notification_log_enabled |
filter | bool |
workflow/class-notifications.php:1010 |
- |
wb_listora_notification_recipients |
filter | mixed($to) $to, mixed($event) $event, mixed($vars) $vars |
workflow/class-notifications.php:922 |
- |
wb_listora_notification_skipped |
action | mixed($event_key) $event_key, string, mixed($context) $context |
workflow/class-notifications.php:668 |
- |
wb_listora_send_notification |
filter | bool $send, string $event, array $vars, string $to |
workflow/class-notifications.php:1032 |
wb-listora-pro |
Page Registry (3)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_page_id |
filter | mixed $id, mixed $key, mixed $context |
core/class-page-registry.php:138 |
- |
wb_listora_page_url |
filter | mixed $url, mixed $key, mixed $args, mixed $id, mixed $out |
core/class-page-registry.php:190 |
- |
wb_listora_register_pages |
action | (none) | page-registry-helpers.php:269 |
wb-listora-pro |
Spam & Rate Limit (7)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_antispam_keyword_blacklist |
filter | mixed $patterns, mixed $default_patterns, mixed $haystack, mixed $… |
class-anti-spam.php:125 |
- |
wb_listora_antispam_max_urls |
filter | mixed $max, mixed $haystack, mixed $context, mixed $matches, mixed… |
class-anti-spam.php:173 |
- |
wb_listora_antispam_should_check |
filter | mixed $should_check, mixed $context, mixed $blacklist_result, mixe… |
class-anti-spam.php:68 |
- |
wb_listora_captcha_bypass |
filter | mixed($bypass) $bypass, mixed($provider) $provider |
class-captcha.php:144 |
- |
wb_listora_rate_limit_bypass |
filter | bool, mixed($action) $action, int |
class-rate-limiter.php:137 |
- |
wb_listora_rate_limit_config |
filter | mixed($config) $config, mixed($action) $action |
class-rate-limiter.php:188 |
- |
wb_listora_trust_proxy_headers |
filter | bool |
class-rate-limiter.php:227 |
- |
Templates (2)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_locate_template |
filter | mixed($template) $template, mixed($template_name) $template_name, … |
class-template-helpers.php:51 |
- |
wb_listora_template_args |
filter | array $args, mixed($template_name) $template_name |
class-template-helpers.php:81 |
- |
Members & Profiles (1)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_member_profile_url |
filter | mixed $user_profile_url, mixed $user_id, mixed $review_data, mixed… |
rest/class-reviews-controller.php:343 |
- |
Lifecycle (10)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_after_calendar |
action | mixed($attributes) $attributes |
blocks/listing-calendar/render.php:215 |
- |
wb_listora_after_categories_grid |
action | mixed($attributes) $attributes |
blocks/listing-categories/render.php:89 |
- |
wb_listora_after_email_verified |
action | int $post_id, mixed($new_status) $new_status |
admin/class-listing-columns.php:468 |
- |
wb_listora_after_map |
action | mixed($attributes) $attributes |
blocks/listing-map/render.php:155 |
- |
wb_listora_after_search_results |
action | (none) | templates/blocks/listing-search/search.php:85 |
wb-listora-pro |
wb_listora_after_template |
action | mixed($template_name) $template_name, mixed($template_path) $templ… |
class-template-helpers.php:89 |
- |
wb_listora_before_calendar |
action | mixed($attributes) $attributes |
blocks/listing-calendar/render.php:190 |
- |
wb_listora_before_categories_grid |
action | mixed($attributes) $attributes |
blocks/listing-categories/render.php:82 |
- |
wb_listora_before_map |
action | mixed($attributes) $attributes |
blocks/listing-map/render.php:135 |
- |
wb_listora_before_template |
action | mixed($template_name) $template_name, mixed($template_path) $templ… |
class-template-helpers.php:87 |
- |
Miscellaneous (26)
| Hook | Type | Args | Fired at | Consumed by |
|---|---|---|---|---|
wb_listora_analytics_retention_days |
filter | int |
workflow/class-expiration-cron.php:232 |
- |
wb_listora_app_config |
filter | `array | mixed $data` | rest/class-settings-controller.php:327 |
wb_listora_appointment_button |
action | int $post_id, mixed($detail_type_slug) $detail_type_slug |
templates/blocks/listing-detail/sidebar.php:79 |
- |
wb_listora_claim_approved |
action | int $claim_id, int $listing_id, mixed($claimant) $claimant |
rest/class-claims-controller.php:531 |
wb-listora-pro |
wb_listora_claim_rejected |
action | int $claim_id, int |
rest/class-claims-controller.php:539 |
- |
wb_listora_credits_purchase_url |
filter | mixed($override) $override |
wb-listora.php:198 |
- |
wb_listora_daily_cleanup |
action | (none) | class-plugin.php:452 (daily cron) |
- |
wb_listora_default_features |
filter | mixed($defaults) $defaults |
class-features.php:120 |
- |
wb_listora_demo_gallery_max |
filter | int $max, string $type |
demo/class-demo-seeder.php:663 |
- |
wb_listora_demo_image_timeout |
filter | int $timeout, string $url |
demo/class-demo-seeder.php:558 |
- |
wb_listora_directory_url |
filter | mixed($default) $default |
class-template-helpers.php:188 |
- |
wb_listora_draft_reminder |
action | int $post_id |
workflow/class-expiration-cron.php:210 |
- |
wb_listora_favorite_added |
action | int $listing_id, int $user_id |
rest/class-favorites-controller.php:249 |
wb-listora-pro |
wb_listora_favorite_removed |
action | int $listing_id, int $user_id |
rest/class-favorites-controller.php:307 |
- |
wb_listora_featured_query_args |
filter | mixed($featured_q_args) $featured_q_args, mixed($attributes) $attr… |
blocks/listing-featured/render.php:30 |
- |
wb_listora_features_registry |
filter | mixed($registry) $registry |
class-features.php:99 |
- |
wb_listora_fullwidth_blocks |
filter | `mixed, WP_Post | int $post` | core/class-theme-defenses.php:77 |
wb_listora_login_modal_register_url |
filter | string $url, int $listing_id, string $current_permalink |
blocks/listing-detail/render.php:801 |
- |
wb_listora_placeholder_url |
filter | mixed($url) $url |
class-template-helpers.php:129 |
- |
wb_listora_pro_cta_should_show |
filter | bool, mixed($surface) $surface |
admin/class-pro-promotion.php:139 |
- |
wb_listora_render_contact_form |
filter | bool $should_render |
class-contact-form.php:56 |
- |
wb_listora_renewal_cost |
filter | mixed($cost) $cost, int $post_id, int $plan_id |
rest/class-listings-controller.php:1335 |
- |
wb_listora_renewal_duration_days |
filter | mixed($duration_days) $duration_days, int $post_id, int $plan_id |
rest/class-listings-controller.php:1338 |
- |
wb_listora_reset_option_keys |
filter | array $option_keys |
rest/class-settings-controller.php:360 |
wb-listora-pro |
wb_listora_schema_data |
filter | `array | mixed $data, int $this->post_id` | schema/class-schema-generator.php:166 |
wb_listora_submit_url |
filter | mixed($default) $default |
class-template-helpers.php:211 |
- |
wb_listora_upgrade_url |
filter | mixed($default) $default |
class-template-helpers.php:258 |
- |
wb_listora_user_credit_balance |
filter | mixed($balance) $balance, int $user_id |
core/class-listing-limits.php:554 |
wb-listora.php:418 |
wb_listora_webhook_secret |
filter | string $default, array $context |
admin/class-settings-page.php:998 |
wb-listora-pro |
How to subscribe
// Action: fires after a listing is created via REST submission.
add_action( 'wb_listora_after_create_listing', function ( $post_id, $request ) {
error_log( "Listing $post_id created" );
}, 10, 2 );
// Filter: modify the response shape.
add_filter( 'wb_listora_rest_prepare_listing', function ( $data, $post, $request ) {
$data['custom_field'] = get_post_meta( $post->ID, '_custom_field', true );
return $data;
}, 10, 3 );
// Filter that aborts a write: return WP_Error to block.
add_filter( 'wb_listora_before_create_review', function ( $value, $listing_id, $args ) {
if ( /* your gate */ ) return new WP_Error( 'gate_blocked', 'Reviews paused.' );
return $value;
}, 10, 3 );
// Since 1.1.0 wb_listora_send_notification passes the recipient address as the
// 4th argument, so you can suppress a notification per recipient.
add_filter( 'wb_listora_send_notification', function ( $send, $event, $vars, $to ) {
if ( str_ends_with( (string) $to, '@example.test' ) ) return false; // never mail test addresses
return $send;
}, 10, 4 );
Reading the table
- Hook - the action/filter name to
add_action/add_filteragainst. - Type -
action(no return) orfilter(must return a value, possiblyWP_Errorfor before-filters). - Args - the parameter signature passed to your callback.
- Fired at - the file:line where
do_action()/apply_filters()calls - useful for reading the surrounding code for context. - Consumed by - every plugin/site that currently listens.
-means the hook is documented but no internal consumer exists yet - first-extender territory.
Related
- REST API - every endpoint that fires these hooks.
- Extending with Listora Pro - how Pro consumes these surfaces.
- Template Overrides - extend without forking templates.
- Custom Fields & Field Types - define your own field types using the registry.