Index ng mga WordPress Hook
Isang nasesearch na index ng mga WordPress action at filter na talagang ginagamit ng mga developer — kasama ang eksaktong add_action/add_filter na signature, kung kailan ito tumatakbo, isang gumaganang halimbawa, at ang bagay na madalas ikamali ng mga tao.
39 na hook, kasama ang eksaktong add_action / add_filter signature, kung kailan ito nagfa-fire, isang gumaganang halimbawa, at ang bagay na madalas ikinaliligaw ng mga tao. 1 ang nakamarkang unverified — hindi pa namin nasusuri ang bilang ng kanilang argument laban sa WordPress source, at mas gugustuhin naming ipabatid iyon kaysa iprisenta ang isang hula bilang katotohanan.
Hindi ito kumpleto at hindi rin nagkukunwaring kumpleto — libu-libo ang hook ng WordPress. Sinasaklaw nito ang mga talagang ginagamit ng mga tao.
Tumatakbo pagkatapos matapos mag-load ang WordPress ngunit bago maipadala ang anumang header. Ang standard na lugar para mag-register ng mga custom post type, taxonomy, at rewrite rule.
Nagfa-fire
Sa bawat request, front end at admin, pagkatapos ma-load ang core, mga plugin at ang theme.
Signature
add_action( 'init', 'my_callback' );Halimbawa
add_action( 'init', function () {
register_post_type( 'book', array(
'public' => true,
'label' => 'Books',
'show_in_rest' => true, // required for the block editor
) );
} );Ang dapat bantayan
Tumatakbo ang init sa BAWAT request kabilang ang AJAX, REST at cron. Ang paggawa ng anumang mabagal dito (isang HTTP request, isang mabigat na query) ay nagpapabigat sa bawat page load. Gayundin: available na ang kasalukuyang user dito, ngunit hindi ka pa maaaring mag-output ng anuman — hindi pa naipapadala ang mga header, ngunit malapit na.
Tumatakbo kapag na-load na ang theme. Ang tamang lugar para sa add_theme_support(), add_image_size(), at pagre-register ng mga nav menu.
Nagfa-fire
Pagkatapos ma-load ang functions.php ng theme, BAGO ang init.
Signature
add_action( 'after_setup_theme', 'my_callback' );Halimbawa
add_action( 'after_setup_theme', function () {
add_theme_support( 'post-thumbnails' );
add_theme_support( 'title-tag' );
add_image_size( 'card', 600, 400, true ); // true = hard crop
} );Ang dapat bantayan
Ang pagre-register ng mga image size sa init sa halip na dito ay gumagana nang aksidente sa karamihan ng kaso at pagkatapos ay nabibigo nang misteryoso sa ilan. Gamitin ang after_setup_theme — iyan ang layunin nito.
Tumatakbo kapag na-load na ang lahat ng aktibong plugin. Ang pinakamaagang ligtas na punto para makipag-ugnayan sa ibang plugin.
Nagfa-fire
Pagkatapos maisama ang bawat plugin file, bago ma-load ang theme.
Signature
add_action( 'plugins_loaded', 'my_callback' );Ang dapat bantayan
Ang kasalukuyang user ay HINDI PA available dito — hindi maaasahang gumana ang wp_get_current_user(). Kung kailangan mo ang user, gamitin ang init.
Tumatakbo pagkatapos ganap na ma-load ang WordPress — handa na ang mga plugin, theme, init, at ang user.
Nagfa-fire
Pagkatapos ng init at pagkatapos ma-set up ang kasalukuyang user.
Signature
add_action( 'wp_loaded', 'my_callback' );Tumatakbo sa simula ng bawat admin request. Ginagamit para sa register_setting(), mga permission check, at mga admin redirect.
Nagfa-fire
Sa bawat request sa panig ng admin.
Signature
add_action( 'admin_init', 'my_callback' );Ang dapat bantayan
Tumatakbo rin ito sa mga admin-ajax.php na request, na hindi naman talaga "admin screen". Kung ipinapalagay ng iyong callback na may screen, bantayan ito gamit ang wp_doing_ajax().
Ang tanging tamang lugar para mag-enqueue ng front-end na CSS at JavaScript.
Nagfa-fire
Sa mga front-end page load, bago ma-render ang head.
Signature
add_action( 'wp_enqueue_scripts', 'my_callback' );Halimbawa
add_action( 'wp_enqueue_scripts', function () {
wp_enqueue_style(
'child-style',
get_stylesheet_uri(),
array( 'parent-style' ), // load AFTER the parent
wp_get_theme()->get( 'Version' ) // cache-bust on version change
);
} );Ang dapat bantayan
Sa kabila ng pangalan, hinahawakan nito ang mga STYLE pati na rin ang mga script — walang wp_enqueue_styles na hook, at nasasayang ang tunay na oras ng mga tao sa paghahanap nito. Gayundin: hindi ito tumatakbo sa admin (gamitin ang admin_enqueue_scripts) o sa block editor (gamitin ang enqueue_block_editor_assets).
Mag-enqueue ng CSS/JS sa admin. Tumatanggap ng hook suffix ng kasalukuyang screen para makapag-load ka ng mga asset sa iisang screen lamang.
Nagfa-fire
Sa mga admin page load.
Signature
add_action( 'admin_enqueue_scripts', 'my_callback' ); // receives $hook_suffixHalimbawa
add_action( 'admin_enqueue_scripts', function ( $hook ) {
if ( 'settings_page_my-plugin' !== $hook ) {
return; // do not load our JS on every admin screen
}
wp_enqueue_script( 'my-admin', plugins_url( 'admin.js', __FILE__ ), array(), '1.0', true );
} );Ang dapat bantayan
Ang hindi pagbabantay sa $hook ang pinakakaraniwang dahilan kung bakit nasisira ng isang plugin ang mga walang kinalamang admin screen. I-load ang iyong mga asset kung saan kailangan at wala nang iba pa.
Mag-enqueue ng mga asset sa block editor (Gutenberg) lamang — hindi sa front end, hindi sa iba pang bahagi ng admin.
Nagfa-fire
Kapag nag-load ang block editor.
Signature
add_action( 'enqueue_block_editor_assets', 'my_callback' );Nag-print ng output sa loob ng <head>. Ginagamit para sa mga meta tag at inline critical CSS.
Nagfa-fire
Sa loob ng <head>, sa front end.
Signature
add_action( 'wp_head', 'my_callback' );Ang dapat bantayan
HUWAG mag-enqueue ng mga script o style dito — gamitin ang wp_enqueue_scripts, na naghahayaan sa WordPress na hawakan ang mga dependency at deduplication. Ang pag-echo ng isang <script> tag sa wp_head ay nilalampasan ang lahat ng iyon at siyang dahilan kung bakit napakaraming site ang naglo-load ng jQuery nang tatlong beses.
Nag-print ng output bago mismo ang </body>. Ang tamang lugar para sa mga analytics snippet at deferred markup.
Nagfa-fire
Sa dulo ng front-end na pahina.
Signature
add_action( 'wp_footer', 'my_callback' );Ang dapat bantayan
Ang theme na nakakalimot tumawag ng wp_footer() ay sumisira sa admin bar, sumisira sa anumang plugin na nag-e-enqueue ng footer script, at awtomatikong tinatanggihan sa theme review ng wordpress.org.
Nagfi-filter ng nilalaman ng post kaagad bago ito ipakita. Ang karaniwang lugar para magdagdag ng markup sa simula o dulo ng isang post.
Nagfa-fire
Sa tuwing tinatawag ang the_content().
Signature
add_filter( 'the_content', 'my_callback' ); // receives $contentHalimbawa
add_filter( 'the_content', function ( $content ) {
if ( ! is_singular( 'post' ) || ! in_the_loop() || ! is_main_query() ) {
return $content; // <- the guard everyone forgets
}
return $content . '<p class="cta">Enjoyed this? Read more.</p>';
} );Ang dapat bantayan
Tumatakbo ito nang mas madalas kaysa sa akala mo — sa mga widget, sa mga REST response, sa excerpt generation ng ilang plugin, at isang beses kada post sa isang loop sa isang archive. Kung wala ang is_singular / in_the_loop / is_main_query na guard, lalabas ang iyong CTA nang labinlimang beses sa blog index at sa loob ng RSS feed. Ito ang pinakamaling-gamit na filter sa WordPress.
Nagfi-filter ng titulo ng post bago ipakita.
Nagfa-fire
Sa tuwing tinatawag ang the_title() o get_the_title().
Signature
add_filter( 'the_title', 'my_callback', 10, 2 ); // receives $title, $post_idAng dapat bantayan
Tumatakbo rin ito para sa mga titulo sa admin menu, sa mga nav menu, at sa document na <title>. Ang pag-filter nito nang walang kondisyon ay magpapapalit ng pangalan ng mga bagay sa mga lugar na hindi mo sinasadya.
Nagtatakda kung ilang SALITA ang naglalaman ng isang auto-generated na excerpt. Ang default ay 55.
Nagfa-fire
Kapag gumagawa ang WordPress ng excerpt para sa isang post na walang manual na excerpt.
Signature
add_filter( 'excerpt_length', 'my_callback' ); // receives $length (words)Halimbawa
add_filter( 'excerpt_length', function ( $length ) {
return 25;
}, 999 ); // high priority: many themes set this too, and last one winsAng dapat bantayan
Wala itong epekto sa mga post na may MANUAL na excerpt — ginagamit ang mga iyon nang salita-por-salita. At maraming theme ang nagtatakda mismo ng filter na ito, kaya madalas mong kailangan ng mataas na priority number para manalo.
Binabago ang string na idinaragdag sa isang pinutol na excerpt. Ang default ay " […]".
Nagfa-fire
Kapag pinutol ang isang auto-generated na excerpt.
Signature
add_filter( 'excerpt_more', 'my_callback' ); // receives $moreBinabago ang isang query BAGO ito tumakbo. Ang tamang paraan para baguhin ang lumalabas sa isang archive — higit na mas mabuti kaysa sa isang pangalawang WP_Query.
Nagfa-fire
Pagkatapos ma-parse ang mga query var, bago mabuo ang SQL.
Signature
add_action( 'pre_get_posts', 'my_callback' ); // receives WP_Query $query (by reference)Halimbawa
add_action( 'pre_get_posts', function ( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return; // <- both guards are mandatory
}
if ( $query->is_category() ) {
$query->set( 'posts_per_page', 12 );
}
} );Ang dapat bantayan
Tumatakbo rin ito sa ADMIN, at tumatakbo ito para sa BAWAT query, kabilang ang mga menu, widget at ang media library. Alisin ang is_admin() at is_main_query() na guard at tahimik mong mababago ang ipinapakita ng admin post list — isang bug na talagang mahirap masubaybayan pabalik. Tandaan din: baguhin ang $query, huwag magbalik ng anuman.
Nagfi-filter ng raw SQL na WHERE clause ng isang query.
Nagfa-fire
Habang binubuo ang query SQL.
Signature
add_filter( 'posts_where', 'my_callback', 10, 2 ); // receives $where, WP_Query $queryAng dapat bantayan
Nagsusulat ka ng raw SQL. Palaging magbantay gamit ang $query->is_main_query() at palaging gamitin ang $wpdb->prepare() para sa anumang user input. Ito ang pinakamabilis na paraan para makapagpasok ng SQL injection sa isang WordPress site.
Nagfi-filter ng kabuuang bilang ng mga post na nahanap ng isang query — na siyang pinagbabatayan ng pagkalkula ng pagination.
Nagfa-fire
Pagkatapos tumakbo ang query, bago kalkulahin ang pagination.
Signature
add_filter( 'found_posts', 'my_callback', 10, 2 ); // receives $found_posts, WP_Query $queryNagtatakda ng laki ng pixel kung saan pataas ay dina-downscale ng WordPress ang isang upload at naghahain ng "-scaled" na kopya sa halip na ang iyong orihinal. Default 2560.
Nagfa-fire
Sa pag-upload, kapag nagpapasya ang WordPress kung ang isang larawan ay "malaki".
Signature
add_filter( 'big_image_size_threshold', 'my_callback' ); // receives int $thresholdHalimbawa
// Serve originals at full resolution — no -scaled copy.
add_filter( 'big_image_size_threshold', '__return_false' );
// Or just raise the ceiling:
add_filter( 'big_image_size_threshold', function () {
return 3840;
} );Ang dapat bantayan
Ito ang pinakakaraniwang dahilan ng "malabo ang aking larawan pagkatapos i-upload sa WordPress", at halos walang nakakaalam na umiiral ito. Nasa disk pa rin ang iyong orihinal — hindi lang ito kailanman inihahain. Tandaan na ito ay para sa PINAKAMAHABANG gilid, at nakakaapekto lamang sa mga larawang na-upload pagkatapos maging aktibo ang filter.
Nagfi-filter ng array ng mga image size na gagawin ng WordPress para sa isang upload. I-unset ang isang size para itigil ang paggawa nito.
Nagfa-fire
Sa pag-upload, bago gawin ang mga derivative na file.
Signature
add_filter( 'intermediate_image_sizes_advanced', 'my_callback', 10, 2 ); // receives $sizes, $metadataHalimbawa
add_filter( 'intermediate_image_sizes_advanced', function ( $sizes ) {
unset( $sizes['1536x1536'] );
unset( $sizes['2048x2048'] );
return $sizes;
} );Ang dapat bantayan
Ang pag-alis ng isang size na talagang GINAGAMIT ng iyong theme ay nangangahulugang babagsak ang WordPress sa full-size na orihinal — na mas malala kaysa sa disk space na natipid mo. At pinipigilan lamang nito ang paggawa ng mga BAGONG file; ang mga umiiral na ay mananatili hanggang mag-regenerate ka.
Nagtatakda ng JPEG quality kung saan muling ine-encode ng WordPress ang mga na-upload na larawan. Default 82.
Nagfa-fire
Sa tuwing nagsusulat ang WordPress ng JPEG.
Signature
add_filter( 'jpeg_quality', 'my_callback', 10, 2 ); // receives $quality, $contextAng dapat bantayan
Maayos ang Quality 82 para sa mga litrato at kitang-kitang mahina para sa mga screenshot, logo at flat graphic — may hard edge ang mga iyon at walang photographic noise na mapagtataguan ng mga artifact. Gayundin: ang wp_editor_set_quality ang mas modernong filter at direktang sumasaklaw sa mga image editor class; karaniwan ang pagtatakda ng dalawa.
Nagtatakda ng output quality na ginagamit ng mga WP_Image_Editor class (GD at Imagick).
Nagfa-fire
Kapag nagtatakda ng quality ang isang image editor instance.
Signature
add_filter( 'wp_editor_set_quality', 'my_callback', 10, 2 ); // receives $quality, $mime_typeNagdaragdag ng iyong mga custom na image size sa size dropdown sa media modal at block editor.
Nagfa-fire
Kapag binubuo ng media UI ang size selector nito.
Signature
add_filter( 'image_size_names_choose', 'my_callback' ); // receives $sizesHalimbawa
add_filter( 'image_size_names_choose', function ( $sizes ) {
return array_merge( $sizes, array( 'card' => __( 'Card', 'textdomain' ) ) );
} );Ang dapat bantayan
Nire-register ng add_image_size() ang size ngunit HINDI ito ginagawang mapipili sa editor. Bawat tanong na "hindi lumalabas sa dropdown ang aking custom image size" ay ang kawalan ng filter na ito.
Sinusuri o tinatanggihan ang isang file BAGO ito ilipat sa uploads folder.
Nagfa-fire
Habang nag-a-upload, bago maisulat ang file.
Signature
add_filter( 'wp_handle_upload_prefilter', 'my_callback' ); // receives $fileAng dapat bantayan
Para tanggihan ang isang file, itakda ang $file['error'] sa isang message string at i-return ang $file. Ang pag-return ng false o pag-throw ay hindi gagawa ng gusto mo.
Nagfi-filter ng metadata array (kabilang ang mga na-generate na size) pagkatapos maproseso ang isang attachment.
Nagfa-fire
Pagkatapos gawin ang mga derivative na larawan sa pag-upload.
Signature
add_filter( 'wp_generate_attachment_metadata', 'my_callback', 10, 2 ); // receives $metadata, $attachment_idAng dapat bantayan
Ito ang hook na ginagamit ng mga image-optimization plugin. Maaari itong maging mabagal — tumatakbo ito pagkatapos maisulat ang bawat image size, at ang paggawa ng HTTP request dito ay nagpapahintay sa bawat upload.
Nagfi-filter ng mga srcset candidate na ginagawa ng WordPress para sa isang responsive na larawan.
Nagfa-fire
Kapag nire-render ang isang responsive na larawan.
Signature
add_filter( 'wp_calculate_image_srcset', 'my_callback', 10, 5 );Ang dapat bantayan
Ang pag-alis ng medium_large (768w) na size sa ibang lugar ay tahimik na nagpapababa sa srcset — umiiral ang size na iyon halos para lamang paglingkuran ito.
Hindi pa namin na-verify ang eksaktong bilang ng argument ng hook na ito laban sa WordPress source. Tingnan ang developer.wordpress.org bago ito asahan. Mas gugustuhin naming ipabatid ang kawalang-katiyakan kaysa tahimik na iprisenta ang isang hula bilang katotohanan.
Nagre-register ng mga admin menu at submenu na pahina.
Nagfa-fire
Kapag binubuo ang admin menu.
Signature
add_action( 'admin_menu', 'my_callback' );Halimbawa
add_action( 'admin_menu', function () {
add_options_page(
'My Plugin',
'My Plugin',
'manage_options', // capability — NOT a role
'my-plugin',
'my_render_settings_page'
);
} );Ang dapat bantayan
Ang capability argument ay isang CAPABILITY, hindi isang role. Ang pagpasa ng "administrator" ay mukhang gumagana (dahil may capability na ganoong pangalan ang mga admin sa ilang setup) at pagkatapos ay tahimik na nagbibigay ng akses sa maling mga tao. Gamitin ang manage_options.
Nag-print ng isang notice sa tuktok ng isang admin screen.
Nagfa-fire
Sa pag-render ng admin page.
Signature
add_action( 'admin_notices', 'my_callback' );Ang dapat bantayan
Tumatakbo ito sa BAWAT admin screen. Ang plugin na nagpapakita ng walang-kondisyong "salamat sa pag-install!" na notice sa lahat ng ito ang pinaka-kinamumuhiang pattern sa WordPress admin. Bantayan ito, at gawing napapawi.
Tumatakbo sa tuwing gumagawa o nag-a-update ng isang post. Ang karaniwang lugar para i-save ang data ng meta box.
Nagfa-fire
Pagkatapos maisulat ang isang post sa database.
Signature
add_action( 'save_post', 'my_callback', 10, 3 ); // receives $post_id, $post, $updateHalimbawa
add_action( 'save_post', function ( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;
if ( wp_is_post_revision( $post_id ) ) return;
if ( ! current_user_can( 'edit_post', $post_id ) ) return;
// ... now it is safe to save
}, 10, 1 );Ang dapat bantayan
Tumatakbo ito sa mga AUTOSAVE at sa mga REVISION pati na rin sa tunay na pag-save. Kung wala ang tatlong guard sa itaas, ang iyong meta ay napapatungan ng mga blangkong value sa tuwing nag-a-autosave ang editor — isang bug na parang random na nawawala ang datos.
Nagre-register ng mga meta box sa post edit screen.
Nagfa-fire
Kapag binubuo ang edit screen.
Signature
add_action( 'add_meta_boxes', 'my_callback', 10, 2 ); // receives $post_type, $postAng dapat bantayan
Hindi lumalabas ang mga classic na meta box sa block editor maliban kung babagsak ang block editor sa compatibility mode. Para sa isang block-editor-native na site, mag-register ng post meta gamit ang show_in_rest at gumawa na lang ng isang sidebar panel.
Tumatakbo pagkatapos matagumpay na mag-log in ng isang user.
Nagfa-fire
Sa matagumpay na authentication.
Signature
add_action( 'wp_login', 'my_callback', 10, 2 ); // receives $user_login, WP_User $userTumatakbo kaagad pagkatapos gawin ang isang bagong user.
Nagfa-fire
Sa pagrehistro.
Signature
add_action( 'user_register', 'my_callback', 10, 2 ); // receives $user_id, $userdataNagfi-filter ng resulta ng authentication. Mag-return ng WP_Error para i-block ang isang login.
Nagfa-fire
Habang sinusubukang mag-login.
Signature
add_filter( 'authenticate', 'my_callback', 30, 3 ); // receives $user, $username, $passwordAng dapat bantayan
Napakahalaga ng priority dito. Ini-hook ng WordPress core ang sarili nitong mga check sa priority 20 at 30 — mag-attach nang masyadong maaga at tatakbo ka bago pa man masuri ang password.
Nagre-register ng mga REST route at field.
Nagfa-fire
Kapag nag-initialize ang REST API.
Signature
add_action( 'rest_api_init', 'my_callback' );Halimbawa
add_action( 'rest_api_init', function () {
register_rest_route( 'myplugin/v1', '/items', array(
'methods' => 'GET',
'callback' => 'my_get_items',
'permission_callback' => '__return_true', // BE DELIBERATE ABOUT THIS
) );
} );Ang dapat bantayan
KAILANGAN ang permission_callback — mula WP 5.5 ang pag-alis nito ay nagbibigay ng notice, at ang pagtatakda nito sa __return_true ay ginagawang ganap na public ang endpoint. Ayos lang iyon para sa tunay na pampublikong data at isang seryosong butas para sa anupaman. Magpasya, huwag mag-default.
Nagdaragdag ng custom na recurrence interval para sa wp_schedule_event().
Nagfa-fire
Kapag binubuo ng WordPress ang listahan nito ng mga available na schedule.
Signature
add_filter( 'cron_schedules', 'my_callback' ); // receives $schedulesHalimbawa
add_filter( 'cron_schedules', function ( $schedules ) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // seconds
'display' => __( 'Every 5 minutes', 'textdomain' ),
);
return $schedules;
} );Ang dapat bantayan
Ang WP-Cron ay hindi tunay na cron. Tumatakbo lamang ito kapag may bumisita sa site, kaya ang isang low-traffic na site ay hindi magpapatakbo ng five-minute na schedule kada limang minuto. Kung mahalaga talaga ang timing, i-disable ang WP-Cron (DISABLE_WP_CRON) at tawagin ang wp-cron.php mula sa isang tunay na system cron.
Tumatakbo kaagad pagkatapos ma-save ang isang komento.
Nagfa-fire
Sa pagsusumite ng komento.
Signature
add_action( 'comment_post', 'my_callback', 10, 3 ); // receives $comment_id, $approved, $commentdataNagfi-filter ng data ng komento bago ito i-save. Ginagamit para sa mga spam check at validation.
Nagfa-fire
Bago maisulat ang komento.
Signature
add_filter( 'preprocess_comment', 'my_callback' ); // receives $commentdataAng dapat bantayan
Para tanggihan ang isang komento dito, tumawag ng wp_die() na may mensahe — ang pag-return ng false ay hindi ito pinipigilan.
Tumatakbo sa order-received na pahina pagkatapos ng matagumpay na checkout.
Nagfa-fire
Kapag dumating ang customer sa thank-you na pahina.
Signature
add_action( 'woocommerce_thankyou', 'my_callback' ); // receives $order_idAng dapat bantayan
HINDI ito maaasahang lugar para mag-trigger ng fulfilment. Tumatakbo lamang ito kung talagang makarating ang customer sa thank-you na pahina — kung isasara nila ang tab pagkatapos magbayad, hindi ito kailanman tatakbo. Gamitin ang woocommerce_payment_complete o isang order-status transition na hook para sa anumang dapat mangyari.
Naglalabas ng markup kaagad bago ang add-to-cart button sa isang product page.
Nagfa-fire
Habang nire-render ang product page.
Signature
add_action( 'woocommerce_before_add_to_cart_button', 'my_callback' );Nagdaragdag, nag-aalis o nag-aayos muli ng mga field sa classic checkout.
Nagfa-fire
Kapag binubuo ang checkout form.
Signature
add_filter( 'woocommerce_checkout_fields', 'my_callback' ); // receives $fieldsAng dapat bantayan
Nakakaapekto lamang ito sa CLASSIC (shortcode) na checkout. Ang mas bagong block-based na checkout ay ganap itong binabalewala at kino-customize sa pamamagitan ng Slot & Fill sa JavaScript. Nadadapa dito ang halos lahat sa unang pagkakataon.