Action & Filter Hooks
Complete reference catalog of 22+ action hooks and 35+ filter hooks across AdFuz core and UI. View Hooks Catalog →
Welcome to the AdFuz Developer Hub. AdFuz is architected with a modular, extensible object-oriented PHP foundation that exposes robust action hooks, filter hooks, a fluent QueryBuilder ORM, and customizable UI form registries.
Action & Filter Hooks
Complete reference catalog of 22+ action hooks and 35+ filter hooks across AdFuz core and UI. View Hooks Catalog →
QueryBuilder & DB Layer
Learn how to use DB::get(TableName::X()) with automatic _meta handling and fluent querying.
QueryBuilder Guide →
AJAX Controllers & Security
Conventions for creating AJAX endpoints with strict capability and nonce security checks. AJAX Conventions →
Extending Forms & UI
Extend Ad Space & Campaign forms, add settings tabs, and register custom ad formats. Extending UI Guide →
AdFuz follows the standard naming convention: adfuz/ui/{entity}/{context}/{hook_name}.
// Lifecycle & Autoloadingadfuz/core/autoload:before // Fires before Free plugin autoloadadfuz/core/autoload:after // Fires after Free plugin autoloadadfuz/vendor/autoload:before // Fires before vendor autoloadadfuz/vendor/autoload:after // Fires after vendor autoloadadfuz/function/core:before // Fires before adfuz() function returnsadfuz/function/core:after // Fires after adfuz() function returnsadfuz/plugins_loaded // Fires on plugins_loaded
// Enqueuing Scriptsadfuz/frontend/scripts:before // Fires before enqueuing frontend scriptsadfuz/frontend/scripts:after // Fires after enqueuing frontend scriptsadfuz/admin/scripts:before // Fires before enqueuing admin scriptsadfuz/admin/scripts:after // Fires after enqueuing admin scripts
// Template Loadingadfuz/before_template_load // Fires before template is includedadfuz/after_template_load // Fires after template is included
// Dashboard UI Sectionsadfuz/ui/dashboard/before_welcome // Dashboard: before welcome sectionadfuz/ui/dashboard/after_welcome // Dashboard: after welcome sectionadfuz/ui/dashboard/after_stats // Dashboard: after stats cardsadfuz/ui/dashboard/after_widgets // Dashboard: after recent widgetsadfuz/ui/dashboard/after_actions // Dashboard: after quick actionsadfuz/ui/dashboard/additional_sections // Dashboard: for extensions
// Installation & Data Mutationsadfuz/install/all_tables // Fires after Free plugin tables installedadfuz/settings/save/{tab} // Fires when saving a specific settings tabadfuz/campaign/after_save // Fires after campaign save (Pro uses this)adfuz/campaign/after_delete // Fires after campaign delete (Pro uses this)AJAX actions follow the WordPress convention: wp_ajax_adfuz_{entity}_{action}
add_action('wp_ajax_adfuz_{entity}_{action}', [MyController::class, 'method']);add_action('wp_ajax_nopriv_adfuz_{entity}_{action}', [MyController::class, 'method']);AdFuz provides granular filters for extending core objects, templates, forms, and UI states:
// Core & Templatesadfuz/core // Filters the adfuz() core objectadfuz_template_name // Filters template name before loadadfuz_template_path // Filters full template pathadfuz_template_output // Filters the rendered template outputadfuz/admin/page/slugs // Filters AdFuz admin page slugsadfuz/admin/menu/sub/menus // Filters submenu itemsadfuz/floating_sidebar/items // Filters floating sidebar itemsadfuz/floating_sidebar/enabled // Controls floating sidebar visibilityadfuz/table_name/definitions // Filters table name definitions
// Settings & Formatsadfuz/settings/tabs // Filters settings tabsadfuz/settings/tab/data/{tab} // Filters tab data before renderadfuz/settings/tab/template/dir // Filters template directory for tabsadfuz/ads/ad_format/formats // Filters available ad formatsadfuz/ad_renderer/wrap_banner_html // Filters banner wrapper HTML
// Ad Space Form & List UIadfuz/ui/adspace/form/sections // Filters ad space form sectionsadfuz/ui/adspace/form/sidebar_actions // Filters ad space sidebar actionsadfuz/ui/adspace/form/sidebar_meta // Filters ad space sidebar metaadfuz/ui/adspace/form/sidebar_delete // Filters ad space delete buttonadfuz/ui/adspace/list/page_actions // Filters ad space list page actionsadfuz/ui/adspace/list/empty_state // Filters ad space empty stateadfuz/ui/adspace/list/stats_display // Filters ad space stats displayadfuz/ui/adspace/list/card_fields // Filters ad space card fieldsadfuz/ui/adspace/list/campaign_columns // Filters ad space campaign columnsadfuz/ui/adspace/list/campaign_empty_state // Filters campaign empty state
// Ads Form & List UIadfuz/ui/ads/list/columns // Filters ad list columnsadfuz/ui/ads/list/stats_display // Filters ad list stats displayadfuz/ui/ads/list/page_actions // Filters ad list page actionsadfuz/ui/ads/list/empty_state // Filters ad list empty stateadfuz/ui/ads/list/status_config // Filters ad status badge configadfuz/ui/ads/common/fields // Filters common ad fieldsadfuz/ui/ads/image/fields // Filters image ad fieldsadfuz/ui/ads/video/fields // Filters video ad fieldsadfuz/ui/ads/script/fields // Filters script ad fieldsadfuz/ui/ads/form/section // Filters ad form sectionsadfuz/ui/ads/form/page_meta // Filters ad form page metaadfuz/ui/ads/menu/ad_types // Filters ad type menu items
// Campaign Form & List UIadfuz/ui/campaign/form/sections // Filters campaign form sectionsadfuz/ui/campaign/list/columns // Filters campaign list columnsadfuz/ui/campaign/list/empty_state // Filters campaign empty stateadfuz/ui/campaign/list/stats_display // Filters campaign stats displayadfuz/campaign/form_data // Filters campaign form data
// Dashboard & Utilitiesadfuz/ui/dashboard/layout_config // Filters dashboard layout configadfuz/ui/dashboard/stat_cards // Filters dashboard stat cardsadfuz/ui/dashboard/quick_actions // Filters dashboard quick actionsadfuz/ui/dashboard/base_data // Filters dashboard base dataadfuz/ui/dashboard/recent_widgets // Filters dashboard recent widgetsadfuz/ui/dashboard/sections // Filters dashboard sectionsadfuz/wpkses_allowed_html // Filters allowed HTML for wp_ksesadfuz/faq/items // Filters FAQ items (Pro adds categories)adfuz/ad_space_meta/meta_schema // Filters ad space meta schemaadfuz/ad_rotator/select_ad/campaigns_data // Filters campaigns data before ad selectionadfuz_show_upgrade_button // Controls upgrade/Donate button visibilityadfuz/templates/.your-theme/adfuz/, preserving the sub-directory structure.add_filter('adfuz_template_path', function($path, $template_name, $args) { if ($template_name === 'admin/adz-space/form') { return get_stylesheet_directory() . '/adfuz/custom-form.php'; } return $path;}, 10, 3);Always use DB::get(TableName::X()) — never write raw $wpdb queries directly:
$ads = DB::get(TableName::ADFUZ_ADS()) ->where('status', 'active') ->orderBy('created_at', 'DESC') ->limit(10) ->get();where, orWhere, whereIn, whereNotInselect, orderBy, limit, groupBy, havingjoin, leftJoin, rightJoin, aliasget, first, find($id), findWithMeta($id), paginate($perPage, $page), exists, countsum, avg, max, mininsert, update, softDelete, hardDelete, deletesrc/Hooks/Action/ and register the hook:
add_action('wp_ajax_adfuz_my_entity_save', [MyController::class, 'save']);// In src/Controllers/AdsController.phppublic static function save(): void { Common::checkCapability(static::getCapabilities()); Common::verifyNonce();
$request = static::request()->input('field', 'post', $default); // ... business logic
wp_send_json_success(['message' => 'Ad saved successfully']);}src/Hooks/Action/ or src/Hooks/Filter/ (e.g. AdSpace.php, Campaigns.php).add_action() or add_filter() call inside its constructor.get_instance() in the parent Action.php or Filter.php.// In src/Hooks/Filter/AdRenderer.phpclass AdRenderer { public function __construct() { add_filter('adfuz/ad_renderer/wrap_banner_html', [$this, 'sticky_ad_wrapper'], 10, 4); }
public function sticky_ad_wrapper($html, $inner, $ad, $ad_space) { // ... business logic return $html; }}// 1. Register Tabadd_filter('adfuz/settings/tabs', function($tabs) { $tabs['geolite'] = ['label' => 'GeoLite2', 'icon' => 'dashicons-location-alt']; return $tabs;});
// 2. Inject Dataadd_filter('adfuz/settings/tab/data/geolite', function($data) { $data['geolite'] = get_option('adfuz_geolite', []); return $data;});
// 3. Point to Template Directoryadd_filter('adfuz/settings/tab/template/dir', function($dir, $tab) { if ($tab === 'geolite') return ADFUZ_PRO_TEMPLATE_DIR; return $dir;}, 10, 2);
// 4. Handle Savingadd_action('adfuz/settings/save/geolite', function() { // Save logic wp_send_json_success(['message' => 'GeoLite2 settings saved.']);});add_filter('adfuz/ads/ad_format/formats', function($formats) { $formats['popup'] = [ 'name' => 'Popup', 'description' => 'Shows a popup ad on page load.', 'status' => 'active', 'placement_type' => 'global', 'max_spaces' => 1, 'settings' => [ 'delay' => ['label' => 'Trigger Delay', 'type' => 'number', 'default' => 3], ], ]; return $formats;});add_filter('adfuz/faq/items', function($faqs) { $faqs['Pro Features'] = [ 'priority' => 5, 'icon' => '⭐', 'items' => [ [ 'q' => 'What Pro features are available?', 'a' => [ ['text', 'AdFuz Pro includes advanced features like:'], ['list', ['Global Ads', 'Advanced targeting', 'Real-time statistics']], ], ], ], ]; return $faqs;});add_filter('adfuz/ui/adspace/form/sections', function($sections) { $sections['display']['fields']['inline_position'] = [ 'order' => 11, 'label' => 'Inline Position', 'row_class' => 'adfuz-inline-only', 'render' => fn() => self::renderInlinePosition(), ]; return $sections;});// Add targeting sectionsadd_filter('adfuz/ui/campaign/form/sections', function($sections, $args) { $sections['geo_targeting'] = [ 'label' => 'Country Targeting', 'order' => 60, 'visible' => true, 'render' => fn() => CampaignTargetingFormController::render_countries($args['campaign']), ]; return $sections;}, 10, 2);
// Inject targeting dataadd_filter('adfuz/campaign/form_data', function($data, $id, $campaign) { $data['target_countries'] = $id ? CampaignTargetCountry::byCampaign($id) : []; $data['available_countries'] = Common::countries(); return $data;}, 10, 3);add_filter('adfuz/ui/dashboard/stat_cards', function($cards) { $cards['global_ads_configured'] = [ 'id' => 'adfuz-dashboard-global-configured', 'order' => 40, 'label' => 'Global Ads - Configured', 'value' => 5, 'href' => admin_url('admin.php?page=adfuz-global-ads'), 'icon' => 'dashicons-globe', 'icon_color' => 'text-emerald-600', 'bg_color' => 'bg-emerald-50', 'border_color' => 'border-emerald-200', 'size' => 'compact', ]; return $cards;});