WB Ad Manager Pro provides a comprehensive set of actions and filters that let you extend and customize every aspect of the plugin. Use these hooks to integrate with third-party services, modify default behavior, or build custom features on top of the ad management system.
Actions
Advertiser Lifecycle
/**
* Fires when a new advertiser is created.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_advertiser_created', $advertiser );
/**
* Fires when advertiser status changes (active, suspended, banned, pending).
*
* @since 1.2.0
* @param int $advertiser_id Advertiser ID.
* @param string $new_status New status.
* @param string $old_status Previous status.
*/
do_action( 'wbam_advertiser_status_changed', $advertiser_id, $new_status, $old_status );
/**
* Fires when an advertiser is deleted.
*
* @since 1.2.0
* @param int $advertiser_id Advertiser ID.
* @param array $data Advertiser data (snapshot before deletion).
*/
do_action( 'wbam_advertiser_deleted', $advertiser_id, $data );
/**
* Fires when a new advertiser registers via the frontend registration form.
*
* @since 1.2.0
* @param int $user_id WordPress user ID.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_advertiser_registered', $user_id, $advertiser );
Example: Send a Slack notification when an advertiser registers:
add_action( 'wbam_advertiser_registered', function( $user_id, $advertiser ) {
$user = get_user_by( 'ID', $user_id );
wp_remote_post( SLACK_WEBHOOK_URL, array(
'body' => wp_json_encode( array(
'text' => sprintf( 'New advertiser: %s (%s)', $user->display_name, $advertiser->company_name ),
) ),
) );
}, 10, 2 );
Advertiser Balance
/**
* Fires when advertiser balance is credited (via Advertiser::credit_balance()).
*
* Note: This is distinct from wbam_wallet_credited which fires at the
* Wallet_Manager transaction level.
*
* @since 1.2.0
* @param int $advertiser_id Advertiser ID.
* @param float $amount Amount credited.
* @param string $note Transaction note.
*/
do_action( 'wbam_advertiser_balance_credited', $advertiser_id, $amount, $note );
/**
* Fires when advertiser balance is debited (via Advertiser::debit_balance()).
*
* @since 1.2.0
* @param int $advertiser_id Advertiser ID.
* @param float $amount Amount debited.
* @param string $note Transaction note.
*/
do_action( 'wbam_advertiser_balance_debited', $advertiser_id, $amount, $note );
Campaign Lifecycle
/**
* Fires when a campaign is created.
*
* @since 1.2.0
* @param Campaign $campaign Campaign object.
*/
do_action( 'wbam_campaign_created', $campaign );
/**
* Fires when a campaign is updated (field changes, not status).
*
* @since 1.2.0
* @param Campaign $campaign Updated campaign object.
* @param array $old_data Previous data snapshot.
*/
do_action( 'wbam_campaign_updated', $campaign, $old_data );
/**
* Fires when campaign status changes (e.g., draft -> active, active -> paused).
*
* Covers all transitions: activation, pause, resume, completion, expiration, cancellation.
*
* @since 1.2.0
* @param Campaign $campaign Campaign object (with new status).
* @param string $old_status Previous status.
* @param string $new_status New status.
*/
do_action( 'wbam_campaign_status_changed', $campaign, $old_status, $new_status );
/**
* Fires when a campaign is deleted.
*
* @since 1.2.0
* @param int $id Campaign ID.
* @param array $data Campaign data snapshot before deletion.
*/
do_action( 'wbam_campaign_deleted', $id, $data );
/**
* Fires when a campaign expires (past end_date).
* Triggered by cron via check_expired_campaigns().
*
* @since 1.2.0
* @param int $campaign_id Campaign ID.
*/
do_action( 'wbam_campaign_expired', $campaign_id );
/**
* Fires when a campaign is auto-completed (budget or limits exhausted).
* Triggered by cron via check_campaign_budgets().
*
* @since 1.3.1
* @param Campaign $campaign Campaign object.
*/
do_action( 'wbam_campaign_auto_completed', $campaign );
/**
* Fires when an ad is auto-disabled because its campaign expired or completed.
*
* @since 1.3.1
* @param int $ad_id WordPress ad post ID.
*/
do_action( 'wbam_ad_auto_disabled', $ad_id );
Example: Log campaign status changes to an external system:
add_action( 'wbam_campaign_status_changed', function( $campaign, $old_status, $new_status ) {
error_log( sprintf(
'Campaign #%d changed from %s to %s (advertiser: %d)',
$campaign->id, $old_status, $new_status, $campaign->advertiser_id
) );
}, 10, 3 );
Billing & Budget
/**
* Fires after hourly billing is processed for all eligible campaigns.
*
* @since 1.3.1
* @param int $processed_count Number of campaigns billed.
* @param float $total_billed Total amount billed across all campaigns.
*/
do_action( 'wbam_hourly_billing_completed', $processed_count, $total_billed );
/**
* Fires when an individual campaign billing is processed (CPM/CPC charge).
*
* @since 1.3.1
* @param Campaign $campaign Campaign object.
* @param float $amount Amount billed.
* @param Transaction $transaction Transaction object.
*/
do_action( 'wbam_campaign_billed', $campaign, $amount, $transaction );
/**
* Fires when a campaign is paused due to insufficient wallet balance.
*
* The campaign is automatically paused and the advertiser should be notified.
*
* @since 1.3.1
* @param Campaign $campaign Campaign object.
* @param float $amount Unbilled amount that could not be charged.
*/
do_action( 'wbam_campaign_insufficient_balance', $campaign, $amount );
Example: Send email when campaign is paused for insufficient balance:
add_action( 'wbam_campaign_insufficient_balance', function( $campaign, $amount ) {
$advertiser = \WBAM_Pro\Modules\Advertisers\Advertiser_Manager::get_instance()->get( $campaign->advertiser_id );
if ( $advertiser ) {
$user = get_user_by( 'ID', $advertiser->user_id );
wp_mail(
$user->user_email,
'Campaign paused - insufficient balance',
sprintf( 'Your campaign "%s" was paused. Please add at least $%.2f to resume.', $campaign->name, $amount )
);
}
}, 10, 2 );
Wallet & Transactions
/**
* Fires when wallet is credited (any source: payment, refund, manual).
*
* This fires at the Wallet_Manager level after the atomic transaction completes.
*
* @since 1.2.0
* @param Transaction $transaction Transaction object.
* @param float $amount Amount credited.
*/
do_action( 'wbam_wallet_credited', $transaction, $amount );
/**
* Fires when wallet is debited (any reason: campaign charge, package, etc.).
*
* @since 1.2.0
* @param Transaction $transaction Transaction object.
* @param float $amount Amount debited.
*/
do_action( 'wbam_wallet_debited', $transaction, $amount );
/**
* Fires when an advertiser's balance falls below the low balance threshold.
* Only fires once per 24 hours per advertiser (throttled).
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param float $balance Current wallet balance.
* @param float $threshold Low balance threshold amount.
*/
do_action( 'wbam_advertiser_low_balance', $advertiser, $balance, $threshold );
/**
* Fires when a manual fund request is submitted (via REST API or frontend form).
*
* @since 1.3.1
* @param int $transaction_id Transaction ID.
* @param Advertiser $advertiser Advertiser object.
* @param float $amount Requested amount.
*/
do_action( 'wbam_fund_request_submitted', $transaction_id, $advertiser, $amount );
/**
* Fires when an admin approves a pending fund request.
*
* @since 1.3.1
* @param int $transaction_id Transaction ID.
* @param Advertiser $advertiser Advertiser object.
* @param float $amount Approved amount.
*/
do_action( 'wbam_fund_request_approved', $transaction_id, $advertiser, $amount );
/**
* Fires when a Stripe webhook event is received.
*
* @since 1.2.0
* @param array $event Stripe event data.
*/
do_action( 'wbam_stripe_webhook', $event );
Ad Submission Lifecycle
/**
* Fires when an ad is submitted for review.
*
* @since 1.3.1
* @param Ad_Submission $submission Submission object.
*/
do_action( 'wbam_ad_submitted', $submission );
/**
* Fires when an ad submission is approved by admin.
*
* @since 1.3.1
* @param Ad_Submission $submission Submission object (status = 'approved').
*/
do_action( 'wbam_ad_submission_approved', $submission );
/**
* Fires when an ad submission is rejected by admin.
*
* @since 1.3.1
* @param Ad_Submission $submission Submission object.
* @param string $reason Rejection reason.
*/
do_action( 'wbam_ad_submission_rejected', $submission, $reason );
/**
* Fires when admin requests changes on a submission.
*
* @since 1.3.1
* @param Ad_Submission $submission Submission object.
* @param string $notes Requested changes description.
*/
do_action( 'wbam_ad_submission_changes_requested', $submission, $notes );
/**
* Fires when an advertiser resubmits a submission after changes.
*
* @since 1.3.1
* @param Ad_Submission $submission Submission object (status reset to 'pending').
*/
do_action( 'wbam_ad_submission_resubmitted', $submission );
Ad Management (Portal)
/**
* Fires when an ad is updated via the advertiser portal.
*
* @since 1.2.0
* @param int $ad_id Ad post ID.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_ad_updated', $ad_id, $advertiser );
/**
* Fires when an ad is deleted via the advertiser portal.
*
* @since 1.2.0
* @param int $ad_id Ad post ID.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_ad_deleted', $ad_id, $advertiser );
Classifieds Lifecycle
/**
* Fires when a classified listing is created.
*
* @since 1.2.0
* @param Classified $classified Classified object.
* @param array $data Original submission data.
*/
do_action( 'wbam_classified_created', $classified, $data );
/**
* Fires when a classified listing is updated.
*
* @since 1.2.0
* @param Classified $classified Classified object.
* @param array $data Update data (changed fields only).
*/
do_action( 'wbam_classified_updated', $classified, $data );
/**
* Fires when a classified listing is deleted.
*
* @since 1.2.0
* @param int $classified_id Classified ID.
* @param int $post_id Associated WordPress post ID.
*/
do_action( 'wbam_classified_deleted', $classified_id, $post_id );
/**
* Fires when a classified is approved by admin.
*
* @since 1.2.0
* @param Classified $classified Classified object (status = 'active').
*/
do_action( 'wbam_classified_approved', $classified );
/**
* Fires when a classified is rejected by admin.
*
* @since 1.2.0
* @param Classified $classified Classified object.
* @param string $reason Rejection reason.
*/
do_action( 'wbam_classified_rejected', $classified, $reason );
/**
* Fires when a classified is marked as sold.
*
* @since 1.2.0
* @param Classified $classified Classified object.
*/
do_action( 'wbam_classified_sold', $classified );
/**
* Fires when a classified expires (past expiry date).
*
* @since 1.2.0
* @param Classified $classified Classified object.
* @param string $old_listing_type Previous listing type before expiration (e.g., 'featured').
*/
do_action( 'wbam_classified_expired', $classified, $old_listing_type );
/**
* Fires when a classified is renewed (expiry date extended).
*
* @since 1.1.0
* @param Classified $classified Classified object.
* @param int $days Number of renewal days.
*/
do_action( 'wbam_classified_renewed', $classified, $days );
/**
* Fires when a classified is bumped to the top of listings.
*
* @since 1.1.0
* @param Classified $classified Classified object.
*/
do_action( 'wbam_classified_bumped', $classified );
/**
* Fires when a classified is about to expire (warning notification).
* Default warning intervals are 7 days and 3 days before expiry.
*
* @since 1.1.0
* @param Classified $classified Classified object.
* @param int $days Days until expiration.
*/
do_action( 'wbam_classified_expiring', $classified, $days );
/**
* Fires when upgrades are applied to a classified (featured, highlighted, urgent, top).
*
* @since 1.2.0
* @param Classified $classified Classified object.
* @param array $applied Array of applied upgrade types.
*/
do_action( 'wbam_classified_upgraded', $classified, $applied );
Classified Featured Billing
/**
* Fires after a classified is upgraded to featured status.
*
* @since 1.3.1
* @param Classified $classified The classified object.
* @param float $fee Monthly fee amount.
* @param int $duration Duration in months.
*/
do_action( 'wbam_classified_featured_upgraded', $classified, $fee, $duration );
/**
* Fires after a classified is downgraded from featured to standard.
*
* @since 1.3.1
* @param Classified $classified The classified object.
* @param string $reason Reason for downgrade (e.g., 'insufficient_funds').
*/
do_action( 'wbam_classified_featured_downgraded', $classified, $reason );
/**
* Fires when featured billing fails due to insufficient wallet funds.
* The classified will be automatically downgraded to standard.
*
* @since 1.3.1
* @param Classified $classified The classified object.
* @param object $advertiser The advertiser object.
* @param float $fee The fee amount that could not be charged.
*/
do_action( 'wbam_classified_featured_billing_failed', $classified, $advertiser, $fee );
/**
* Fires after successful recurring featured billing renewal.
*
* @since 1.3.1
* @param Classified $classified The classified object.
* @param float $fee The fee amount charged.
*/
do_action( 'wbam_classified_featured_renewed', $classified, $fee );
/**
* Fires when a classified is downgraded from featured via cron (upgrade expired).
*
* @since 1.3.1
* @param int $classified_id Classified ID.
*/
do_action( 'wbam_classified_downgraded', $classified_id );
Inquiries
/**
* Fires when an inquiry is received on a classified listing.
*
* @since 1.2.0
* @param object $inquiry Inquiry object.
*/
do_action( 'wbam_inquiry_received', $inquiry );
/**
* Fires when a seller replies to an inquiry.
*
* @since 1.2.0
* @param object $inquiry Inquiry object.
* @param string $message Reply message text.
*/
do_action( 'wbam_inquiry_replied', $inquiry, $message );
Seller Following
/**
* Fires when a user follows a seller.
*
* @since 1.1.0
* @param int $advertiser_id The seller's advertiser ID.
* @param int $user_id The user who followed.
*/
do_action( 'wbam_seller_followed', $advertiser_id, $user_id );
/**
* Fires when a user unfollows a seller.
*
* @since 1.1.0
* @param int $advertiser_id The seller's advertiser ID.
* @param int $user_id The user who unfollowed.
*/
do_action( 'wbam_seller_unfollowed', $advertiser_id, $user_id );
/**
* Fires when followers are notified of a new listing by a seller they follow.
*
* @since 1.1.0
* @param Classified $classified Classified object.
* @param array $followers Array of follower user data.
*/
do_action( 'wbam_followers_notified_new_listing', $classified, $followers );
Package Lifecycle
/**
* Fires when an ad package is created.
*
* @since 1.2.0
* @param Package $package Package object.
*/
do_action( 'wbam_package_created', $package );
/**
* Fires when an ad package is updated.
*
* @since 1.2.0
* @param Package $package Updated package object.
* @param array $old_data Previous data snapshot.
*/
do_action( 'wbam_package_updated', $package, $old_data );
/**
* Fires when an ad package is deleted.
*
* @since 1.2.0
* @param int $id Package ID.
* @param array $data Package data snapshot before deletion.
*/
do_action( 'wbam_package_deleted', $id, $data );
Link Management (Pro)
/**
* Fires when Links Pro module initializes.
*
* @since 1.0.0
* @param object $module Links Pro module instance.
*/
do_action( 'wbam_pro_links_module_init', $module );
/**
* Fires when a post is scanned for links.
*
* @since 1.0.0
* @param int $post_id Post ID scanned.
* @param array $links_found Array of stored links from the scan.
*/
do_action( 'wbam_post_scanned', $post_id, $links_found );
/**
* Fires when link health check batch completes.
*
* @since 1.0.0
* @param array $results Batch of checked links with results.
*/
do_action( 'wbam_health_check_batch_complete', $results );
/**
* Fires when batch link scan completes.
*
* @since 1.0.0
* @param array $results Array of scanned posts.
*/
do_action( 'wbam_batch_scan_complete', $results );
/**
* Fires on link redirect (for tracking).
*
* @since 1.0.0
* @param object $link Link object.
* @param string $destination Destination URL.
* @param array $click_data Click tracking data.
*/
do_action( 'wbam_pro_link_redirect', $link, $destination, $click_data );
Cron & Scheduled Tasks
/**
* Fires after daily analytics aggregation completes.
*
* @since 1.0.0
*/
do_action( 'wbam_daily_aggregation_complete' );
/**
* Fires after hourly cleanup completes (old analytics data purge).
*
* @since 1.0.0
*/
do_action( 'wbam_hourly_cleanup_complete' );
/**
* Fires to trigger hourly CPM/CPC billing calculation.
* Implemented by Wallet module (Billing_Manager).
*
* @since 1.3.1
*/
do_action( 'wbam_calculate_hourly_billing' );
/**
* Fires to check and auto-pause campaigns with exhausted budgets.
* Implemented by Campaign module.
*
* @since 1.3.1
*/
do_action( 'wbam_do_check_campaign_budgets' );
/**
* Fires to check and alert low wallet balances.
* Implemented by Wallet module.
*
* @since 1.3.1
*/
do_action( 'wbam_do_check_low_balances' );
/**
* Fires after classifieds expiration cron runs.
*
* @since 1.0.0
* @param int $count Number of expired classifieds.
*/
do_action( 'wbam_classifieds_expired', $count );
/**
* Fires after classified upgrades expire.
*
* @since 1.3.1
* @param int $count Number of expired upgrades.
*/
do_action( 'wbam_upgrades_expired', $count );
/**
* Fires after audit log cleanup.
*
* @since 1.3.1
* @param int $count Number of deleted audit log entries.
*/
do_action( 'wbam_audit_log_cleaned', $count );
/**
* Fires before a cron job is manually triggered (via admin UI).
*
* @since 1.3.1
* @param string $hook Job hook name.
*/
do_action( 'wbam_before_manual_cron', $hook );
/**
* Fires after a cron job is manually triggered.
*
* @since 1.3.1
* @param string $hook Job hook name.
*/
do_action( 'wbam_after_manual_cron', $hook );
Audit Log
/**
* Fires after an audit log entry is created.
*
* @since 1.2.0
* @param int $log_id Log entry ID.
* @param array $data Log data (action, entity_type, entity_id, old_value, new_value, user_id).
*/
do_action( 'wbam_audit_logged', $log_id, $data );
Plugin Bootstrap
/**
* Fires after all Pro modules are initialized.
*
* Use this to interact with loaded modules or register custom modules.
*
* @since 1.2.0
* @param array $modules Array of active module instances.
*/
do_action( 'wbam_pro_modules_init', $modules );
Admin Settings
/**
* Fires to render custom settings tab content.
*
* The hook name is dynamic: wbam_pro_settings_tab_{$tab_slug}.
*
* @since 1.2.0
* @param array $settings Plugin settings.
*/
do_action( 'wbam_pro_settings_tab_' . $current_tab, $settings );
Example: Add a custom settings tab:
// 1. Register the tab via filter.
add_filter( 'wbam_pro_settings_tabs', function( $tabs ) {
$tabs['my_custom'] = __( 'My Custom Tab', 'my-plugin' );
return $tabs;
} );
// 2. Render tab content via action.
add_action( 'wbam_pro_settings_tab_my_custom', function( $settings ) {
echo '<h2>My Custom Settings</h2>';
// Render your settings fields.
} );
Portal & Form Actions
Advertiser Portal
/**
* Fires in the portal tab header area (add action buttons, etc.).
*
* @since 1.2.0
* @param string $current_tab Current portal tab slug.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_portal_tab_header_actions', $current_tab, $advertiser );
/**
* Fires to render custom portal tab content.
* Triggered when the active tab does not match any built-in tab.
*
* @since 1.2.0
* @param string $tab Tab slug.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_portal_tab_content', $tab, $advertiser );
Example: Add a custom portal tab:
// 1. Register the tab.
add_filter( 'wbam_pro_portal_tabs', function( $tabs, $advertiser_id ) {
$tabs['reports'] = __( 'Reports', 'my-plugin' );
return $tabs;
}, 10, 2 );
// 2. Render content.
add_action( 'wbam_portal_tab_content', function( $tab, $advertiser ) {
if ( 'reports' !== $tab ) return;
echo '<h3>Custom Reports</h3>';
// ... render reports.
}, 10, 2 );
Ad Creation Form
/**
* Fires before the ad creation form.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_pro_ad_form_before', $advertiser );
/**
* Fires after the scheduling section in the ad form.
* Use this to add custom fields.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param string $ad_type Selected ad type (image, video, html, etc.).
*/
do_action( 'wbam_pro_ad_form_fields', $advertiser, $ad_type );
/**
* Fires after the ad creation form.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_pro_ad_form_after', $advertiser );
/**
* Fires before processing ad submission (before validation).
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param array $post_data Posted form data ($_POST).
*/
do_action( 'wbam_pro_ad_submission_before', $advertiser, $post_data );
/**
* Fires after ad is saved to allow saving custom field data.
*
* @since 1.2.0
* @param int $ad_id Ad post ID.
* @param string $ad_type Ad type.
* @param Advertiser $advertiser Advertiser object.
* @param array $post_data Posted form data ($_POST).
*/
do_action( 'wbam_pro_ad_submission_save_meta', $ad_id, $ad_type, $advertiser, $post_data );
Ad Edit Form
/**
* Fires at the start of the edit ad form.
*
* @since 1.2.0
* @param WP_Post $ad Ad post object.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_edit_ad_form_start', $ad, $advertiser );
/**
* Fires after scheduling fields in the edit ad form, before status info.
*
* @since 1.2.0
* @param WP_Post $ad Ad post object.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_edit_ad_form_after_fields', $ad, $advertiser );
Campaign Forms
/**
* Fires before the submit button in the create campaign form.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_campaign_form_before_submit', $advertiser );
/**
* Fires before the submit button in the edit campaign form.
*
* @since 1.2.0
* @param object $campaign Campaign object.
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_edit_campaign_form_before_submit', $campaign, $advertiser );
Classified Form (My Classifieds Shortcode)
/**
* Fires at the start of the my-classifieds form (before title field).
*
* @since 1.2.0
* @param Classified|null $classified Classified object or null for new.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_classified_form_start', $classified, $advertiser );
/**
* Fires after basic fields (title, price, category, location).
*
* @since 1.2.0
* @param Classified|null $classified Classified object or null for new.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_classified_form_after_basic_fields', $classified, $advertiser );
/**
* Fires after detail fields (description, images, contact info).
*
* @since 1.2.0
* @param Classified|null $classified Classified object or null for new.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_classified_form_after_details', $classified, $advertiser );
/**
* Fires before the submit button.
*
* @since 1.2.0
* @param Classified|null $classified Classified object or null for new.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_classified_form_before_submit', $classified, $advertiser );
/**
* Fires before the featured action buttons in the promote form.
*
* @since 1.2.0
* @param object $classified Classified object.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_promote_form_before_actions', $classified, $advertiser );
Classified Form (Dashboard/Portal)
/**
* Fires at the start of the dashboard classified form, before the title field.
*
* @since 1.2.0
* @param object|null $classified Classified object (null for new).
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_dashboard_classified_form_start', $classified, $advertiser );
/**
* Fires after category and location fields in the dashboard classified form.
*
* @since 1.2.0
* @param object|null $classified Classified object (null for new).
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_dashboard_classified_after_basic_fields', $classified, $advertiser );
/**
* Fires after detail fields (price, condition, description, images).
*
* @since 1.2.0
* @param object|null $classified Classified object (null for new).
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_dashboard_classified_after_details', $classified, $advertiser );
/**
* Fires after contact fields, before the submit button.
*
* @since 1.2.0
* @param object|null $classified Classified object (null for new).
* @param Advertiser $advertiser Advertiser object.
*/
do_action( 'wbam_dashboard_classified_before_submit', $classified, $advertiser );
Profile & Registration Forms
/**
* Fires after notification preferences in the profile form.
* Use this to add custom profile fields.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param WP_User $user WordPress user object.
*/
do_action( 'wbam_pro_profile_form_fields', $advertiser, $user );
/**
* Fires before processing profile update.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param WP_User $user WordPress user object.
* @param array $post_data Posted form data ($_POST).
*/
do_action( 'wbam_pro_profile_update_before', $advertiser, $user, $post_data );
/**
* Fires after profile update is processed.
* Use this to save custom field data added via wbam_pro_profile_form_fields.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param WP_User $user WordPress user object.
* @param array $post_data Posted form data ($_POST).
*/
do_action( 'wbam_pro_profile_update_after', $advertiser, $user, $post_data );
/**
* Fires after standard registration form fields.
* Use this to add custom registration fields.
*
* @since 1.2.0
*/
do_action( 'wbam_pro_registration_form_fields' );
/**
* Fires after advertiser profile is created during registration.
* Use this to save custom field data.
*
* @since 1.2.0
* @param Advertiser $advertiser Advertiser object.
* @param int $user_id WordPress user ID.
* @param array $post_data Posted form data ($_POST).
*/
do_action( 'wbam_pro_registration_save_data', $advertiser, $user_id, $post_data );
Example: Add a custom field to registration:
// 1. Add the field to the form.
add_action( 'wbam_pro_registration_form_fields', function() {
echo '<div class="wbam-form-group">';
echo '<label for="tax_id">Tax ID</label>';
echo '<input type="text" name="tax_id" id="tax_id">';
echo '</div>';
} );
// 2. Save the data after registration.
add_action( 'wbam_pro_registration_save_data', function( $advertiser, $user_id, $post_data ) {
if ( ! empty( $post_data['tax_id'] ) ) {
update_user_meta( $user_id, '_wbam_tax_id', sanitize_text_field( $post_data['tax_id'] ) );
}
}, 10, 3 );
Receipts & Email Templates
/**
* Fires before receipt template renders.
*
* @since 1.1.0
* @param object $transaction Transaction object.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_before_receipt', $transaction, $advertiser );
/**
* Add custom sections to receipt before total.
*
* @since 1.1.0
* @param object $transaction Transaction object.
* @param object $advertiser Advertiser object.
*/
do_action( 'wbam_receipt_before_total', $transaction, $advertiser );
/**
* Add custom content before benefits list in expiring email.
*
* @since 1.1.0
* @param object $classified Classified object.
* @param int $days_left Days until expiration.
*/
do_action( 'wbam_classified_expiring_email_before_benefits', $classified, $days_left );
Filters
Advertiser Filters
/**
* Filter advertiser capabilities.
*
* @since 1.0.0
* @param array $caps Capabilities array.
* @param int $advertiser_id Advertiser ID.
*/
$caps = apply_filters( 'wbam_pro_advertiser_capabilities', $caps, $advertiser_id );
/**
* Filter advertiser portal tabs.
*
* @since 1.0.0
* @param array $tabs Portal tab slug => label pairs.
* @param int $advertiser_id Advertiser ID.
*/
$tabs = apply_filters( 'wbam_pro_portal_tabs', $tabs, $advertiser_id );
/**
* Filter to validate whether an advertiser can post classifieds.
*
* Return WP_Error to prevent posting with a custom message.
*
* @since 1.2.0
* @param true|WP_Error $result Validation result.
* @param object $advertiser Advertiser object.
*/
$result = apply_filters( 'wbam_validate_advertiser_can_post', true, $advertiser );
Example: Restrict posting to verified advertisers only:
add_filter( 'wbam_validate_advertiser_can_post', function( $result, $advertiser ) {
if ( ! get_user_meta( $advertiser->user_id, '_verified_seller', true ) ) {
return new WP_Error( 'not_verified', 'Only verified sellers can post classifieds.' );
}
return $result;
}, 10, 2 );
Campaign Filters
/**
* Filter campaign pricing calculation.
*
* @since 1.0.0
* @param float $price Calculated price.
* @param array $campaign Campaign data.
* @param array $impressions Impression data.
*/
$price = apply_filters( 'wbam_pro_campaign_price', $price, $campaign, $impressions );
/**
* Filter available placements for package.
*
* @since 1.0.0
* @param array $placements Available placements.
* @param int $package_id Package ID.
*/
$placements = apply_filters( 'wbam_pro_package_placements', $placements, $package_id );
/**
* Filter bot detection patterns used for excluding bot traffic from analytics.
*
* @since 1.0.0
* @param array $patterns Array of bot user agent pattern strings (lowercase).
*/
$patterns = apply_filters( 'wbam_bot_patterns', $patterns );
Payment & Wallet Filters
/**
* Filter available payment gateways.
*
* @since 1.0.0
* @param array $gateways Available gateways.
*/
$gateways = apply_filters( 'wbam_pro_payment_gateways', $gateways );
/**
* Filter payment amount before processing.
*
* @since 1.0.0
* @param float $amount Payment amount.
* @param string $gateway_id Gateway identifier.
* @param array $context Payment context.
*/
$amount = apply_filters( 'wbam_pro_payment_amount', $amount, $gateway_id, $context );
/**
* Filter minimum deposit amount for wallet funding.
*
* @since 1.0.0
* @param float $amount Minimum amount (default: 5.00).
*/
$amount = apply_filters( 'wbam_pro_minimum_deposit', 5.00 );
/**
* Filter available wallet payment methods shown in the frontend form.
*
* @since 1.0.0
* @param array $methods Array of payment method slug => label pairs.
*/
$methods = apply_filters( 'wbam_wallet_payment_methods', $methods );
Classified Filters
/**
* Filter classified listing output.
*
* @since 1.0.0
* @param string $output Listing HTML.
* @param int $classified_id Classified ID.
* @param array $args Display arguments.
*/
$output = apply_filters( 'wbam_pro_classified_output', $output, $classified_id, $args );
/**
* Filter classified search query args.
*
* @since 1.0.0
* @param array $args Query arguments.
* @param array $search Search parameters.
*/
$args = apply_filters( 'wbam_pro_classified_search_args', $args, $search );
/**
* Filter classifieds per page for listing pages.
*
* @since 1.0.0
* @param int $per_page Number of items per page (default: 12).
*/
$per_page = apply_filters( 'wbam_classifieds_per_page', 12 );
/**
* Filter classified bump cost.
*
* @since 1.1.0
* @param float $cost Bump cost (default: 2.00).
*/
$cost = apply_filters( 'wbam_classified_bump_cost', 2.00 );
/**
* Filter classified renewal cost.
*
* @since 1.1.0
* @param float $cost Renewal cost (default: 0.00, free renewal).
*/
$cost = apply_filters( 'wbam_classified_renewal_cost', 0.00 );
/**
* Filter classified renewal days.
*
* @since 1.1.0
* @param int $days Default renewal days (default: 30).
*/
$days = apply_filters( 'wbam_classified_renewal_days', 30 );
/**
* Filter individual upgrade prices. One filter per upgrade type.
*
* @since 1.2.0
* @param float $price Default price.
*/
$prices = array(
'featured' => apply_filters( 'wbam_upgrade_price_featured', 5.00 ),
'highlighted' => apply_filters( 'wbam_upgrade_price_highlighted', 3.00 ),
'urgent' => apply_filters( 'wbam_upgrade_price_urgent', 4.00 ),
'top' => apply_filters( 'wbam_upgrade_price_top', 6.00 ),
'bump' => apply_filters( 'wbam_upgrade_price_bump', 2.00 ),
);
/**
* Filter upgrade durations (in days).
*
* @since 1.2.0
* @param array $durations Associative array of upgrade_type => duration_days.
*/
$durations = apply_filters( 'wbam_classified_upgrade_durations', array(
'featured' => 30,
'highlighted' => 14,
'urgent' => 7,
'top' => 7,
'bump' => 0, // Instant, no duration.
) );
/**
* Filter max images per classified.
*
* @since 1.0.0
* @param int $max Max images allowed (default from settings, fallback: 10).
*/
$max = apply_filters( 'wbam_classified_max_images', 10 );
/**
* Filter expiration warning days (when to send expiry warnings).
*
* @since 1.1.0
* @param array $days Array of days before expiry to send warnings (default: [7, 3]).
*/
$days = apply_filters( 'wbam_classified_expiration_warning_days', array( 7, 3 ) );
Link Filters (Pro)
/**
* Filter affiliate domains for link scanner.
*
* @since 1.0.0
* @param array $domains List of affiliate domains.
*/
$domains = apply_filters( 'wbam_affiliate_domains', array(
'amazon.com', 'amzn.to', 'shareasale.com', 'commission-junction.com'
) );
/**
* Filter whether to auto-link a post.
*
* @since 1.0.0
* @param bool $should Whether to process post (default: true).
* @param WP_Post $post Post object.
*/
$should = apply_filters( 'wbam_pro_should_auto_link_post', true, $post );
/**
* Filter HTML tags excluded from auto-linking.
*
* @since 1.0.0
* @param array $tags Tags to exclude (default: a, script, style, code, pre).
*/
$tags = apply_filters( 'wbam_pro_auto_link_excluded_tags', array( 'a', 'script', 'style', 'code', 'pre' ) );
/**
* Filter click tracking data.
*
* @since 1.0.0
* @param array $data Click data (ip, user_agent, referrer, etc.).
* @param int $link_id Link ID.
*/
$data = apply_filters( 'wbam_pro_click_data', $data, $link_id );
/**
* Filter whether to track a click.
*
* @since 1.0.0
* @param bool $should Whether to track (default: true).
*/
$should = apply_filters( 'wbam_pro_should_track_click', true );
Analytics & Tracking Filters
/**
* Filter whether the current visitor has given tracking consent.
*
* Returns false by default. Use this to integrate with cookie consent plugins.
*
* @since 1.2.0
* @param bool $has_consent Whether tracking consent has been given (default: false).
*/
$has_consent = apply_filters( 'wbam_has_tracking_consent', false );
Example: Integrate with a cookie consent plugin:
add_filter( 'wbam_has_tracking_consent', function( $has_consent ) {
// Check your consent management platform.
if ( function_exists( 'my_cookie_consent_given' ) ) {
return my_cookie_consent_given( 'analytics' );
}
return $has_consent;
} );
Template Filters
/**
* Filter template arguments before loading.
*
* @since 1.2.0
* @param array $args Template arguments.
* @param string $template Template name (e.g., 'portal/tab-overview').
*/
$args = apply_filters( 'wbam_template_args', $args, $template );
/**
* Filter placements from the free WB Ad Manager plugin.
*
* Used by Package to resolve placement names.
*
* @since 1.0.0
* @param array $placements Associative array of placement_id => placement_data.
*/
$placements = apply_filters( 'wbam_get_placements', array() );
BuddyPress Filters
/**
* Filter the seller xProfile fields displayed on classified detail pages.
*
* @since 1.2.0
* @param array $fields Array of field data arrays (name, value).
* @param int $user_id The seller's WordPress user ID.
*/
$fields = apply_filters( 'wbam_seller_xprofile_fields', $fields, $user_id );
Portal & Forms Filters
/**
* Filter ad submission validation.
* Return WP_Error to fail validation with a custom message.
*
* @since 1.0.0
* @param true|WP_Error $valid True or WP_Error.
* @param string $title Ad title.
* @param string $url Ad URL.
* @param string $ad_type Ad type.
* @param Advertiser $advertiser Advertiser object.
* @param array $post_data Posted form data ($_POST).
*/
$valid = apply_filters( 'wbam_pro_ad_submission_validation', true, $title, $url, $ad_type, $advertiser, $post_data );
/**
* Filter registration validation.
* Return WP_Error to fail validation with a custom message.
*
* @since 1.0.0
* @param true|WP_Error $valid True or WP_Error.
* @param string $username Username.
* @param string $email Email address.
* @param array $post_data Posted form data ($_POST).
*/
$valid = apply_filters( 'wbam_pro_registration_validation', true, $username, $email, $post_data );
/**
* Filter settings page tabs.
*
* @since 1.0.0
* @param array $tabs Associative array of tab_slug => label.
* @param array $settings Current plugin settings.
*/
$tabs = apply_filters( 'wbam_pro_settings_tabs', $tabs, $settings );
/**
* Filter registered cron jobs.
*
* @since 1.0.0
* @param array $jobs Associative array of hook => job config.
*/
$jobs = apply_filters( 'wbam_pro_cron_jobs', $jobs );
Admin Table Filters
/**
* Filter transaction list table columns.
*
* @since 1.1.0
* @param array $columns Associative array of column_slug => label.
*/
$columns = apply_filters( 'wbam_transaction_table_columns', $columns );
/**
* Filter transaction row actions.
*
* @since 1.1.0
* @param array $actions Associative array of action_slug => link HTML.
* @param object $item Transaction row item.
*/
$actions = apply_filters( 'wbam_transaction_row_actions', $actions, $item );
Email Template Filters
/**
* Filter classified expiring email heading.
*
* @since 1.1.0
* @param string $heading Email heading text.
* @param object $classified Classified object.
* @param int $days_left Days until expiration.
*/
$heading = apply_filters( 'wbam_classified_expiring_email_heading', $heading, $classified, $days_left );
/**
* Filter renewal benefits list in expiring email.
*
* @since 1.1.0
* @param array $benefits Array of benefit strings.
* @param object $classified Classified object.
*/
$benefits = apply_filters( 'wbam_classified_expiring_email_benefits', $benefits, $classified );
Quick Reference Table
Actions Summary
| Hook | Parameters | Source |
|---|---|---|
wbam_advertiser_created |
$advertiser |
Advertiser_Manager |
wbam_advertiser_status_changed |
$advertiser_id, $new_status, $old_status |
Advertiser_Manager |
wbam_advertiser_deleted |
$advertiser_id, $data |
Advertiser_Manager |
wbam_advertiser_registered |
$user_id, $advertiser |
Advertiser_Shortcodes |
wbam_advertiser_balance_credited |
$advertiser_id, $amount, $note |
Advertiser |
wbam_advertiser_balance_debited |
$advertiser_id, $amount, $note |
Advertiser |
wbam_campaign_created |
$campaign |
Campaign_Manager |
wbam_campaign_updated |
$campaign, $old_data |
Campaign_Manager |
wbam_campaign_status_changed |
$campaign, $old_status, $new_status |
Campaign_Manager |
wbam_campaign_deleted |
$id, $data |
Campaign_Manager |
wbam_campaign_expired |
$campaign_id |
Campaign_Manager |
wbam_campaign_auto_completed |
$campaign |
Campaign_Manager |
wbam_ad_auto_disabled |
$ad_id |
Campaign_Manager |
wbam_hourly_billing_completed |
$processed_count, $total_billed |
Billing_Manager |
wbam_campaign_billed |
$campaign, $amount, $transaction |
Billing_Manager |
wbam_campaign_insufficient_balance |
$campaign, $amount |
Billing_Manager |
wbam_wallet_credited |
$transaction, $amount |
Wallet_Manager |
wbam_wallet_debited |
$transaction, $amount |
Wallet_Manager |
wbam_advertiser_low_balance |
$advertiser, $balance, $threshold |
Wallet_Manager |
wbam_fund_request_submitted |
$transaction_id, $advertiser, $amount |
Wallet_API / Shortcodes |
wbam_fund_request_approved |
$transaction_id, $advertiser, $amount |
Pro_Admin |
wbam_stripe_webhook |
$event |
Stripe_Integration |
wbam_ad_submitted |
$submission |
Ad_Submission_Manager |
wbam_ad_submission_approved |
$submission |
Ad_Submission_Manager |
wbam_ad_submission_rejected |
$submission, $reason |
Ad_Submission_Manager |
wbam_ad_submission_changes_requested |
$submission, $notes |
Ad_Submission_Manager |
wbam_ad_submission_resubmitted |
$submission |
Ad_Submission_Manager |
wbam_ad_updated |
$ad_id, $advertiser |
Advertiser_Shortcodes |
wbam_ad_deleted |
$ad_id, $advertiser |
Advertiser_Shortcodes |
wbam_classified_created |
$classified, $data |
Classified_Manager |
wbam_classified_updated |
$classified, $data |
Classified_Manager |
wbam_classified_deleted |
$classified_id, $post_id |
Classified_Manager |
wbam_classified_approved |
$classified |
Classified_Manager |
wbam_classified_rejected |
$classified, $reason |
Classified_Manager |
wbam_classified_sold |
$classified |
Classified_Manager |
wbam_classified_expired |
$classified, $old_listing_type |
Classified_Manager |
wbam_classified_renewed |
$classified, $days |
Classified_Manager |
wbam_classified_bumped |
$classified |
Classified_Manager |
wbam_classified_expiring |
$classified, $days |
Classified_Manager |
wbam_classified_upgraded |
$classified, $applied |
Classified_Manager |
wbam_classified_featured_upgraded |
$classified, $fee, $duration |
Classified |
wbam_classified_featured_downgraded |
$classified, $reason |
Classified |
wbam_classified_featured_billing_failed |
$classified, $advertiser, $fee |
Classified |
wbam_classified_featured_renewed |
$classified, $fee |
Classified |
wbam_classified_downgraded |
$classified_id |
Cron_Manager |
wbam_inquiry_received |
$inquiry |
Email_Notifications |
wbam_inquiry_replied |
$inquiry, $message |
Classified_Manager |
wbam_seller_followed |
$advertiser_id, $user_id |
Advertiser |
wbam_seller_unfollowed |
$advertiser_id, $user_id |
Advertiser |
wbam_followers_notified_new_listing |
$classified, $followers |
Email_Notifications |
wbam_package_created |
$package |
Package_Manager |
wbam_package_updated |
$package, $old_data |
Package_Manager |
wbam_package_deleted |
$id, $data |
Package_Manager |
wbam_audit_logged |
$log_id, $data |
Audit_Logger |
wbam_pro_modules_init |
$modules |
Pro_Plugin |
wbam_daily_aggregation_complete |
— | Cron_Manager |
wbam_hourly_cleanup_complete |
— | Cron_Manager |
wbam_calculate_hourly_billing |
— | Cron_Manager |
wbam_do_check_campaign_budgets |
— | Cron_Manager |
wbam_do_check_low_balances |
— | Cron_Manager |
wbam_classifieds_expired |
$count |
Cron_Manager |
wbam_upgrades_expired |
$count |
Cron_Manager |
wbam_audit_log_cleaned |
$count |
Cron_Manager |
wbam_before_manual_cron |
$hook |
Cron_Manager |
wbam_after_manual_cron |
$hook |
Cron_Manager |
Filters Summary
| Hook | Default | Source |
|---|---|---|
wbam_pro_advertiser_capabilities |
$caps |
— |
wbam_pro_portal_tabs |
$tabs |
— |
wbam_validate_advertiser_can_post |
true |
Classified_Shortcodes |
wbam_pro_campaign_price |
$price |
— |
wbam_pro_package_placements |
$placements |
— |
wbam_bot_patterns |
$patterns |
Campaign_Manager |
wbam_pro_payment_gateways |
$gateways |
— |
wbam_pro_payment_amount |
$amount |
— |
wbam_pro_minimum_deposit |
5.00 |
Wallet_API |
wbam_wallet_payment_methods |
$methods |
Advertiser_Shortcodes |
wbam_pro_classified_output |
$output |
— |
wbam_pro_classified_search_args |
$args |
— |
wbam_classifieds_per_page |
12 |
Classified_Shortcodes |
wbam_classified_bump_cost |
2.00 |
Ajax_Handler |
wbam_classified_renewal_cost |
0.00 |
Ajax_Handler |
wbam_classified_renewal_days |
30 |
Ajax_Handler |
wbam_upgrade_price_featured |
5.00 |
Ajax_Handler |
wbam_upgrade_price_highlighted |
3.00 |
Ajax_Handler |
wbam_upgrade_price_urgent |
4.00 |
Ajax_Handler |
wbam_upgrade_price_top |
6.00 |
Ajax_Handler |
wbam_upgrade_price_bump |
2.00 |
Ajax_Handler |
wbam_classified_upgrade_durations |
array(...) |
Classified_Manager |
wbam_classified_max_images |
10 |
Shortcode_Assets |
wbam_classified_expiration_warning_days |
[7, 3] |
Classified_Manager |
wbam_has_tracking_consent |
false |
Analytics_Tracker |
wbam_template_args |
$args |
Template_Loader |
wbam_get_placements |
array() |
Package |
wbam_seller_xprofile_fields |
$fields |
XProfile_Helper |
wbam_pro_ad_submission_validation |
true |
Advertiser_Shortcodes |
wbam_pro_registration_validation |
true |
Advertiser_Shortcodes |
wbam_pro_settings_tabs |
$tabs |
Pro_Admin |
wbam_pro_cron_jobs |
$jobs |
Cron_Manager |
wbam_transaction_table_columns |
$columns |
Transactions_List_Table |
wbam_transaction_row_actions |
$actions |
Transactions_List_Table |
wbam_classified_expiring_email_heading |
$heading |
— |
wbam_classified_expiring_email_benefits |
$benefits |
— |
wbam_affiliate_domains |
array(...) |
— |
wbam_pro_should_auto_link_post |
true |
Keyword_Linker |
wbam_pro_auto_link_excluded_tags |
array(...) |
— |
wbam_pro_click_data |
$data |
Link_Tracker |
wbam_pro_should_track_click |
true |
Link_Tracker |
