Blog
WordPress Hook Architectuur: Acties vs. Filters Uitgelegd
De basis van elke geweldige plugin. Leer hoe PAGEnza AI hooks en filters gebruikt om onderhoudbare, schaalbare code te creëren.
Elke WordPress-plugin doet één van de twee dingen: hij voert code uit op een specifiek moment (actie), of hij wijzigt een waarde voordat deze wordt gebruikt (filter). Dat is alles. Het hele WordPress-plugin-ecosysteem is gebouwd op dit onderscheid.
Het begrijpen van het verschil — en wanneer je elk moet gebruiken — is wat plugins die werken scheidt van plugins die problemen veroorzaken.
Acties: iets doen op een bepaald moment
Een actiehook is een signaal dat WordPress (of een andere plugin) op een specifiek moment verzendt. Je koppelt een functie aan dat signaal, en je functie wordt uitgevoerd wanneer het signaal wordt geactiveerd.
add_action( 'wp_enqueue_scripts', 'my_plugin_load_assets' );
function my_plugin_load_assets() {
wp_enqueue_style( 'my-plugin', plugin_dir_url( __FILE__ ) . 'style.css' );
wp_enqueue_script( 'my-plugin', plugin_dir_url( __FILE__ ) . 'script.js', ['jquery'], '1.0', true );
}
wp_enqueue_scripts wordt geactiveerd wanneer WordPress zich voorbereidt om assets voor de front-end te laden. Hierop inhaken is de juiste manier om CSS en JS te laden — niet door <script>-tags rechtstreeks in templates te plaatsen.
Veelgebruikte actiehooks die je constant zult gebruiken:
init— wordt vroeg uitgevoerd, goed voor het registreren van post types en taxonomieënwp_enqueue_scripts— laad front-end assetsadmin_enqueue_scripts— laad admin assetssave_post— wordt uitgevoerd wanneer een bericht wordt opgeslagen, goed voor het verwerken van aangepaste veldenwp_ajax_{action}— verwerk AJAX-verzoeken van geauthenticeerde gebruikerswp_ajax_nopriv_{action}— verwerk AJAX van niet-ingelogde gebruikers
Filters: een waarde wijzigen voordat deze wordt gebruikt
Een filterhook geeft je een waarde, laat je deze wijzigen, en verwacht dat je de gewijzigde versie teruggeeft. WordPress gebruikt vervolgens je gewijzigde waarde in plaats van het origineel.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Klaar om PAGEnza te proberen? <a href="#">Gratis aan de slag →</a></div>';
return $content . $cta;
}
De cruciale regel: geef altijd iets terug van een filter. Als je de return vergeet, wordt de waarde null en heb je wat deze gebruikte zojuist kapotgemaakt.
Veelgebruikte filterhooks:
the_content— de berichtinhoud vóór weergavethe_title— de berichttitelwp_nav_menu_items— navigatiemenu HTMLupload_mimes— toegestane bestandsuploadtypenplugin_action_links_{plugin-file}— links weergegeven op de pluginlijstpagina
Hoe PAGEnza AI hooks gebruikt
Wanneer de Plugin Builder een plugin genereert, structureert hij de code rond een klasse met methoden die aan hooks zijn gekoppeld in de constructor. Dit patroon voorkomt naamconflicten van globale functies en houdt de code georganiseerd.
class My_Plugin {
public function __construct() {
add_action( 'init', [ $this, 'register_post_type' ] );
add_action( 'wp_enqueue_scripts', [ $this, 'load_assets' ] );
add_filter( 'the_content', [ $this, 'append_content' ] );
}
public function register_post_type() { /* ... */ }
public function load_assets() { /* ... */ }
public function append_content( $content ) {
// altijd teruggeven
return $content;
}
}
new My_Plugin();
De beveiligingsscan controleert specifiek of AJAX-handlers zowel een nonce-check als een capability-check bevatten voordat ze iets doen:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Beveiliging: nonce verifiëren
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Beveiliging: machtigingen verifiëren
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Onvoldoende machtigingen', 403 );
}
// Nu veilig om te verwerken
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Het ontbreken van een van deze wordt gemarkeerd als een beveiligingsprobleem en blokkeert de release van de plugin.
Prioriteit en de hook-wachtrij
Wanneer meerdere functies aan dezelfde hook zijn gekoppeld, worden ze uitgevoerd in volgorde van prioriteit (lager getal = eerst uitgevoerd). Standaard prioriteit is 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // standaard
add_action( 'init', 'runs_last', 20 );
Dit is belangrijk wanneer je plugin moet worden uitgevoerd vóór of na de code van een andere plugin. Als je iets wijzigt dat een andere plugin ook wijzigt, bepaalt de prioriteit wie er wint.
Een veelvoorkomend patroon: als je een filter van een thema overschrijft, gebruik dan prioriteit 20 of hoger om ervoor te zorgen dat je na de code van het thema wordt uitgevoerd.
Hooks verwijderen
Je kunt een hook verwijderen die iemand anders heeft toegevoegd — inclusief thema- en plugin-hooks:
remove_action( 'wp_head', 'wp_generator' ); // verwijdert WP-versie uit <head>
remove_filter( 'the_content', 'wpautop' ); // verwijdert automatische paragraafomwikkeling
De addertje onder het gras: je kunt een hook alleen verwijderen als je remove_action/remove_filter aanroept nadat de oorspronkelijke add_action/add_filter is uitgevoerd. Dit betekent meestal dat je je verwijdering moet koppelen aan een latere actie.