Blogg
WordPress Hook-arkitektur: Åtgärder vs. Filter Förklarat
Grunden för varje bra plugin. Lär dig hur PAGEnza AI använder krokar och filter för att skapa underhållbar, skalbar kod.
Varje WordPress-plugin gör en av två saker: den kör kod vid en specifik tidpunkt (åtgärd) eller den modifierar ett värde innan det används (filter). Det är allt. Hela WordPress-plugin-ekosystemet bygger på denna distinktion.
Att förstå skillnaden – och när man ska använda var och en – är det som skiljer plugins som fungerar från plugins som orsakar problem.
Åtgärder: gör något vid en tidpunkt
En åtgärdskrok (action hook) är en signal som WordPress (eller ett annat plugin) skickar vid en specifik tidpunkt. Du kopplar en funktion till den signalen, och din funktion körs när signalen avfyras.
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 avfyras när WordPress förbereder sig för att ladda tillgångar för front-end. Att haka fast vid den är det korrekta sättet att ladda CSS och JS – inte att släppa <script>-taggar direkt i mallar.
Vanliga åtgärdskrokar du kommer att använda ständigt:
init– körs tidigt, bra för att registrera inläggstyper och taxonomierwp_enqueue_scripts– ladda tillgångar för front-endadmin_enqueue_scripts– ladda tillgångar för adminsave_post– körs när ett inlägg sparas, bra för att bearbeta anpassade fältwp_ajax_{action}– hantera AJAX-förfrågningar från autentiserade användarewp_ajax_nopriv_{action}– hantera AJAX från inloggade användare
Filter: modifiera ett värde innan det används
En filterkrok (filter hook) ger dig ett värde, låter dig modifiera det och förväntar sig att du returnerar den modifierade versionen. WordPress använder sedan ditt modifierade värde istället för originalet.
add_filter( 'the_content', 'my_plugin_append_cta' );
function my_plugin_append_cta( $content ) {
if ( ! is_single() ) {
return $content;
}
$cta = '<div class="post-cta">Redo att prova PAGEnza? <a href="#">Kom igång gratis →</a></div>';
return $content . $cta;
}
Den kritiska regeln: returnera alltid något från ett filter. Om du glömmer return blir värdet null och du har precis brutit vad som än använde det.
Vanliga filterkrokar:
the_content– inläggets innehåll före visningthe_title– inläggets titelwp_nav_menu_items– HTML för navigeringsmenynupload_mimes– tillåtna filuppladdningstyperplugin_action_links_{plugin-file}– länkar som visas på sidan för pluginlistan
Hur PAGEnza AI använder krokar
När Plugin Builder genererar ett plugin strukturerar den koden kring en klass med metoder kopplade till krokar i konstruktorn. Detta mönster undviker kollisioner med globala funktionsnamn och håller koden organiserad.
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 ) {
// returnera alltid
return $content;
}
}
new My_Plugin();
Säkerhetsskanningen kontrollerar specifikt att AJAX-hanterare inkluderar både en nonce-kontroll och en behörighetskontroll innan de gör något:
add_action( 'wp_ajax_my_action', [ $this, 'handle_ajax' ] );
public function handle_ajax() {
// Säkerhet: verifiera nonce
check_ajax_referer( 'my_nonce_action', 'nonce' );
// Säkerhet: verifiera behörigheter
if ( ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( 'Otillräckliga behörigheter', 403 );
}
// Nu säkert att bearbeta
$data = sanitize_text_field( $_POST['data'] ?? '' );
wp_send_json_success( [ 'result' => $data ] );
}
Att sakna någon av dessa flaggas som ett säkerhetsproblem och blockerar pluginet från att släppas.
Prioritet och krok-kön
När flera funktioner är kopplade till samma krok körs de i ordning efter prioritet (lägre nummer = körs först). Standardprioritet är 10.
add_action( 'init', 'runs_first', 5 );
add_action( 'init', 'runs_second', 10 ); // standard
add_action( 'init', 'runs_last', 20 );
Detta spelar roll när ditt plugin behöver köras före eller efter ett annat plugins kod. Om du modifierar något som ett annat plugin också modifierar, kontrollerar prioritet vem som vinner.
Ett vanligt mönster: om du åsidosätter ett temas filter, använd prioritet 20 eller högre för att säkerställa att du körs efter temats kod.
Ta bort krokar
Du kan ta bort en krok som någon annan har lagt till – inklusive tema- och plugin-krokar:
remove_action( 'wp_head', 'wp_generator' ); // tar bort WP-version från <head>
remove_filter( 'the_content', 'wpautop' ); // tar bort automatisk paragrafformatering
Fångsten: du kan bara ta bort en krok om du anropar remove_action/remove_filter efter att den ursprungliga add_action/add_filter har körts. Detta innebär vanligtvis att du kopplar bort din borttagning till en senare åtgärd.