WordPress hooks: actions en filters uitgelegd
Laatst bijgewerkt: 31 December 2025
WordPress hooks zijn het fundament van aanpasbaarheid. Ze stellen je in staat WordPress te modificeren zonder kernbestanden te wijzigen. Dit artikel legt uit wat hooks zijn en hoe je ze effectief gebruikt.
Wat Zijn Hooks?
Hooks zijn specifieke punten in WordPress waar je eigen code kunt "inhaken". Er zijn twee typen:
Actions: Voer iets uit op een bepaald moment Filters: Wijzig data voordat die wordt gebruikt
Analogie
Denk aan hooks als aansluitpunten:
- Actions zijn stopcontacten: je plugt iets in en het doet iets
- Filters zijn waterleidingen: data stroomt erdoorheen en je kunt het aanpassen
Actions
Actions voeren code uit op specifieke momenten:
// Een action toevoegen
add_action('hook_naam', 'jouw_functie', 10, 2);
// Parameters:
// 1. Hook naam
// 2. Callback functie
// 3. Prioriteit (standaard 10, lager = eerder)
// 4. Aantal argumenten
Veelgebruikte Actions
// Bij WordPress initialisatie
add_action('init', function() {
// Registreer custom post types, [taxonomieën](/kennisbank/wordpress-taxonomieen-uitleg)
});
// In de <head> sectie
add_action('wp_head', function() {
echo '<meta name="author" content="Jouw Naam">';
});
// Bij het laden van scripts
add_action('wp_enqueue_scripts', function() {
wp_enqueue_style('mijn-stijl', get_stylesheet_uri());
wp_enqueue_script('mijn-script', get_template_directory_uri() . '/js/app.js');
});
// Na het opslaan van een post
add_action('save_post', function($post_id, $post) {
// Doe iets na het opslaan
}, 10, 2);
// Bij inloggen
add_action('wp_login', function($username, $user) {
// Log inlogactiviteit
}, 10, 2);
Eigen Actions Maken
// Definieer een hook in je code
do_action('mijn_custom_hook', $parameter1, $parameter2);
// Anderen kunnen er nu op inhaken
add_action('mijn_custom_hook', function($param1, $param2) {
// Custom code
}, 10, 2);
Filters
Filters wijzigen data:
// Een filter toevoegen
add_filter('hook_naam', 'jouw_functie', 10, 2);
// BELANGRIJK: Filters moeten altijd iets returnen!
Veelgebruikte Filters
// Wijzig de titel
add_filter('the_title', function($title) {
return strtoupper($title); // Maak hoofdletters
});
// Wijzig de content
add_filter('the_content', function($content) {
// Voeg tekst toe aan het einde
return $content . '<p>Bedankt voor het lezen!</p>';
});
// Wijzig excerpt lengte
add_filter('excerpt_length', function($length) {
return 30; // 30 woorden
});
// Wijzig "Lees meer" tekst
add_filter('excerpt_more', function($more) {
return '... <a href="' . get_permalink() . '">Lees verder</a>';
});
// Wijzig admin footer tekst
add_filter('admin_footer_text', function($text) {
return 'Powered by WordPress | Beheerd door Jouw Bedrijf';
});
// Body classes toevoegen
add_filter('body_class', function($classes) {
if (is_user_logged_in()) {
$classes[] = 'logged-in-user';
}
return $classes;
});
Eigen Filters Maken
// Definieer een filter
$waarde = apply_filters('mijn_custom_filter', $originele_waarde, $extra_param);
// Anderen kunnen nu filteren
add_filter('mijn_custom_filter', function($waarde, $param) {
return $waarde * 2;
}, 10, 2);
Prioriteit en Volgorde
De prioriteit bepaalt wanneer je hook uitgevoerd wordt:
// Prioriteit 5 - wordt eerst uitgevoerd
add_action('init', 'functie_eerst', 5);
// Prioriteit 10 (standaard)
add_action('init', 'functie_normaal', 10);
// Prioriteit 99 - wordt laatst uitgevoerd
add_action('init', 'functie_laatst', 99);
Praktisch Voorbeeld
// Je wilt de output van een andere plugin aanpassen
// Die plugin gebruikt prioriteit 10, dus gebruik 11
add_filter('andere_plugin_output', 'mijn_aanpassing', 11);
Hooks Verwijderen
// Verwijder een action
remove_action('wp_head', 'wp_generator');
// Verwijder een filter
remove_filter('the_content', 'wpautop');
// Verwijder met specifieke prioriteit
remove_action('init', 'functie_naam', 15);
Anonieme Functies Verwijderen
Anonieme functies zijn lastig te verwijderen:
// Dit werkt NIET
add_action('init', function() { /* code */ });
remove_action('init', function() { /* code */ }); // Werkt niet!
// Oplossing: gebruik named functions
function mijn_init_functie() { /* code */ }
add_action('init', 'mijn_init_functie');
remove_action('init', 'mijn_init_functie'); // Werkt wel
Hooks in Thema vs Plugin
functions.php (Thema)
// Thema-specifieke aanpassingen
add_action('after_setup_theme', function() {
add_theme_support('post-thumbnails');
add_theme_support('title-tag');
register_nav_menus([
'primary' => 'Hoofdmenu',
'footer' => 'Footermenu'
]);
});
Plugin
// Plugin-specifieke hooks
register_activation_hook(__FILE__, 'mijn_plugin_activate');
register_deactivation_hook(__FILE__, 'mijn_plugin_deactivate');
function mijn_plugin_activate() {
// Maak database tabellen, flush rewrite rules
flush_rewrite_rules();
}
Veelgebruikte Hook Patronen
Shortcode Maken
add_shortcode('contact_knop', function($atts) {
$atts = shortcode_atts([
'tekst' => 'Neem contact op',
'url' => '/contact'
], $atts);
return '<a href="' . esc_url($atts['url']) . '" class="button">' .
esc_html($atts['tekst']) . '</a>';
});
// Gebruik: [contact_knop tekst="Bel ons" url="/bel"]
Custom Post Type Registreren
add_action('init', function() {
register_post_type('portfolio', [
'label' => 'Portfolio',
'public' => true,
'has_archive' => true,
'supports' => ['title', 'editor', 'thumbnail'],
'menu_icon' => 'dashicons-portfolio'
]);
});
Admin Kolommen Toevoegen
// Voeg kolom toe
add_filter('manage_posts_columns', function($columns) {
$columns['thumbnail'] = 'Afbeelding';
return $columns;
});
// Vul kolom
add_action('manage_posts_custom_column', function($column, $post_id) {
if ($column === 'thumbnail') {
echo get_the_post_thumbnail($post_id, [50, 50]);
}
}, 10, 2);
AJAX Handler
// Voor ingelogde gebruikers
add_action('wp_ajax_mijn_actie', 'handle_ajax');
// Voor niet-ingelogde gebruikers
add_action('wp_ajax_nopriv_mijn_actie', 'handle_ajax');
function handle_ajax() {
check_ajax_referer('mijn_nonce');
$result = ['success' => true, 'data' => 'Resultaat'];
wp_send_json($result);
}
Debugging Hooks
Welke Hooks Worden Uitgevoerd?
add_action('all', function($hook) {
if (strpos($hook, 'wp_') === 0) {
error_log("Hook: {$hook}");
}
});
Hook Inspectie
// Bekijk alle callbacks op een hook
global $wp_filter;
print_r($wp_filter['the_content']);
Query Monitor Plugin
Installeer Query Monitor om hooks visueel te inspecteren in de admin bar.
Best Practices
1. Gebruik Specifieke Hooks
// Slecht: te algemeen
add_action('init', 'laad_mijn_assets');
// Beter: specifiekere hook
add_action('wp_enqueue_scripts', 'laad_mijn_assets');
2. Check Context
add_action('admin_init', function() {
// Alleen op specifieke admin pagina
if (get_current_screen()->id !== 'edit-post') return;
// Je code
});
3. Prefix Je Functies
// Voorkom conflicten met unieke prefix
function mijnbedrijf_custom_function() {
// code
}
add_action('init', 'mijnbedrijf_custom_function');
4. Return Bij Filters
// FOUT: vergeten te returnen
add_filter('the_title', function($title) {
$title = 'Prefix: ' . $title;
// Oeps, geen return!
});
// GOED
add_filter('the_title', function($title) {
return 'Prefix: ' . $title;
});
Meer informatie: WordPress.org documentatie
Veelgestelde vragen
Hoe lang duurt het om dit te implementeren?
De implementatietijd varieert per situatie. Voor eenvoudige configuraties is dit binnen een uur geregeld, complexere setups kunnen enkele uren tot een dag duren.
Wat zijn de kosten?
De kosten zijn afhankelijk van je hosting provider en pakket. Veel basisfuncties zijn gratis inbegrepen, voor geavanceerde functies kunnen extra kosten gelden.
Heb ik technische kennis nodig?
Voor de basis heb je weinig technische kennis nodig. De meeste hosting providers bieden uitgebreide documentatie en support om je te helpen.
Was dit artikel nuttig?
Vergelijk direct hosting pakketten om de beste keuze voor jouw situatie te maken.
Gerelateerde artikelen
Wat is webhosting? Uitleg voor beginners
Ontdek wat webhosting is en hoe het werkt. Complete uitleg over servers, domeinen en verschillende hosting types voor beginners.
Wat is VPS hosting?
VPS hosting uitgelegd: wat is een virtual private server, voor wie is het geschikt en wat zijn de voordelen ten opzichte van shared hosting?
Wat is een SSL-certificaat?
Alles over SSL-certificaten: wat is SSL, waarom heb je het nodig en hoe herken je een beveiligde website? Essentieel voor elke website.
Wat is uptime bij webhosting?
Wat betekent uptime bij webhosting? Leer over uptime percentages, SLA garanties en waarom 99.9% uptime belangrijk is voor je website.
Hoeveel opslag heb ik nodig voor mijn website?
Ontdek hoeveel schijfruimte je echt nodig hebt voor je website. Praktische gids met voorbeelden per websitetype.