2019-11-02 10:38:58 +01:00
< ? php
/**
* Sets up the default filters and actions for most
* of the WordPress hooks .
*
2025-02-28 08:42:11 +01:00
* This file is loaded very early in the bootstrap which
* means many functions are not yet available and site
* information such as if this is multisite is unknown .
* Before using functions besides `add_filter` and
* `add_action` , verify things will work as expected .
*
2019-11-02 10:38:58 +01:00
* If you need to remove a default hook , this file will
2022-06-16 14:03:35 +02:00
* give you the priority to use for removing the hook .
2019-11-02 10:38:58 +01:00
*
2022-06-16 14:03:35 +02:00
* Not all of the default hooks are found in this file .
* For instance , administration - related hooks are located in
* wp - admin / includes / admin - filters . php .
*
* If a hook should only be called from a specific context
* ( admin area , multisite environment… ), please move it
* to a more appropriate file instead .
2019-11-02 10:38:58 +01:00
*
* @ package WordPress
*/
2020-05-06 17:23:38 +02:00
// Strip, trim, kses, special chars for string saves.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'pre_term_name' , 'pre_comment_author_name' , 'pre_link_name' , 'pre_link_target' , 'pre_link_rel' , 'pre_user_display_name' , 'pre_user_first_name' , 'pre_user_last_name' , 'pre_user_nickname' ) as $filter ) {
add_filter ( $filter , 'sanitize_text_field' );
add_filter ( $filter , 'wp_filter_kses' );
add_filter ( $filter , '_wp_specialchars' , 30 );
}
2020-05-06 17:23:38 +02:00
// Strip, kses, special chars for string display.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'term_name' , 'comment_author_name' , 'link_name' , 'link_target' , 'link_rel' , 'user_display_name' , 'user_first_name' , 'user_last_name' , 'user_nickname' ) as $filter ) {
if ( is_admin () ) {
// These are expensive. Run only on admin pages for defense in depth.
add_filter ( $filter , 'sanitize_text_field' );
add_filter ( $filter , 'wp_kses_data' );
}
add_filter ( $filter , '_wp_specialchars' , 30 );
}
2020-05-06 17:23:38 +02:00
// Kses only for textarea saves.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'pre_term_description' , 'pre_link_description' , 'pre_link_notes' , 'pre_user_description' ) as $filter ) {
add_filter ( $filter , 'wp_filter_kses' );
}
2020-05-06 17:23:38 +02:00
// Kses only for textarea admin displays.
2019-11-02 10:38:58 +01:00
if ( is_admin () ) {
foreach ( array ( 'term_description' , 'link_description' , 'link_notes' , 'user_description' ) as $filter ) {
add_filter ( $filter , 'wp_kses_data' );
}
add_filter ( 'comment_text' , 'wp_kses_post' );
}
2020-05-06 17:23:38 +02:00
// Email saves.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'pre_comment_author_email' , 'pre_user_email' ) as $filter ) {
add_filter ( $filter , 'trim' );
add_filter ( $filter , 'sanitize_email' );
add_filter ( $filter , 'wp_filter_kses' );
}
2020-05-06 17:23:38 +02:00
// Email admin display.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'comment_author_email' , 'user_email' ) as $filter ) {
add_filter ( $filter , 'sanitize_email' );
if ( is_admin () ) {
add_filter ( $filter , 'wp_kses_data' );
}
}
2020-05-06 17:23:38 +02:00
// Save URL.
2019-11-02 10:38:58 +01:00
foreach ( array (
'pre_comment_author_url' ,
'pre_user_url' ,
'pre_link_url' ,
'pre_link_image' ,
'pre_link_rss' ,
'pre_post_guid' ,
) as $filter ) {
add_filter ( $filter , 'wp_strip_all_tags' );
2022-12-15 17:47:31 +01:00
add_filter ( $filter , 'sanitize_url' );
2019-11-02 10:38:58 +01:00
add_filter ( $filter , 'wp_filter_kses' );
}
2020-05-06 17:23:38 +02:00
// Display URL.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'user_url' , 'link_url' , 'link_image' , 'link_rss' , 'comment_url' , 'post_guid' ) as $filter ) {
if ( is_admin () ) {
add_filter ( $filter , 'wp_strip_all_tags' );
}
add_filter ( $filter , 'esc_url' );
if ( is_admin () ) {
add_filter ( $filter , 'wp_kses_data' );
}
}
2020-05-06 17:23:38 +02:00
// Slugs.
2019-11-02 10:38:58 +01:00
add_filter ( 'pre_term_slug' , 'sanitize_title' );
add_filter ( 'wp_insert_post_data' , '_wp_customize_changeset_filter_insert_post_data' , 10 , 2 );
2020-05-06 17:23:38 +02:00
// Keys.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'pre_post_type' , 'pre_post_status' , 'pre_post_comment_status' , 'pre_post_ping_status' ) as $filter ) {
add_filter ( $filter , 'sanitize_key' );
}
2020-05-06 17:23:38 +02:00
// Mime types.
2019-11-02 10:38:58 +01:00
add_filter ( 'pre_post_mime_type' , 'sanitize_mime_type' );
add_filter ( 'post_mime_type' , 'sanitize_mime_type' );
2020-05-06 17:23:38 +02:00
// Meta.
2020-09-15 14:29:22 +02:00
add_filter ( 'register_meta_args' , '_wp_register_meta_args_allowed_list' , 10 , 2 );
2019-11-02 10:38:58 +01:00
2022-06-16 14:03:35 +02:00
// Counts.
add_action ( 'admin_init' , 'wp_schedule_update_user_counts' );
add_action ( 'wp_update_user_counts' , 'wp_schedule_update_user_counts' , 10 , 0 );
foreach ( array ( 'user_register' , 'deleted_user' ) as $action ) {
add_action ( $action , 'wp_maybe_update_user_counts' , 10 , 0 );
}
2020-05-06 17:23:38 +02:00
// Post meta.
2019-11-02 10:38:58 +01:00
add_action ( 'added_post_meta' , 'wp_cache_set_posts_last_changed' );
add_action ( 'updated_post_meta' , 'wp_cache_set_posts_last_changed' );
add_action ( 'deleted_post_meta' , 'wp_cache_set_posts_last_changed' );
2023-09-26 10:33:34 +02:00
// User meta.
add_action ( 'added_user_meta' , 'wp_cache_set_users_last_changed' );
add_action ( 'updated_user_meta' , 'wp_cache_set_users_last_changed' );
add_action ( 'deleted_user_meta' , 'wp_cache_set_users_last_changed' );
add_action ( 'add_user_role' , 'wp_cache_set_users_last_changed' );
add_action ( 'set_user_role' , 'wp_cache_set_users_last_changed' );
add_action ( 'remove_user_role' , 'wp_cache_set_users_last_changed' );
2020-05-06 17:23:38 +02:00
// Term meta.
2019-11-02 10:38:58 +01:00
add_action ( 'added_term_meta' , 'wp_cache_set_terms_last_changed' );
add_action ( 'updated_term_meta' , 'wp_cache_set_terms_last_changed' );
add_action ( 'deleted_term_meta' , 'wp_cache_set_terms_last_changed' );
add_filter ( 'get_term_metadata' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'add_term_metadata' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'update_term_metadata' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'delete_term_metadata' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'get_term_metadata_by_mid' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'update_term_metadata_by_mid' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'delete_term_metadata_by_mid' , 'wp_check_term_meta_support_prefilter' );
add_filter ( 'update_term_metadata_cache' , 'wp_check_term_meta_support_prefilter' );
2020-05-06 17:23:38 +02:00
// Comment meta.
2019-11-02 10:38:58 +01:00
add_action ( 'added_comment_meta' , 'wp_cache_set_comments_last_changed' );
add_action ( 'updated_comment_meta' , 'wp_cache_set_comments_last_changed' );
add_action ( 'deleted_comment_meta' , 'wp_cache_set_comments_last_changed' );
2020-05-06 17:23:38 +02:00
// Places to balance tags on input.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'content_save_pre' , 'excerpt_save_pre' , 'comment_save_pre' , 'pre_comment_content' ) as $filter ) {
add_filter ( $filter , 'convert_invalid_entities' );
add_filter ( $filter , 'balanceTags' , 50 );
}
// Format strings for display.
2021-07-23 11:58:50 +02:00
foreach ( array ( 'comment_author' , 'term_name' , 'link_name' , 'link_description' , 'link_notes' , 'bloginfo' , 'wp_title' , 'document_title' , 'widget_title' ) as $filter ) {
2019-11-02 10:38:58 +01:00
add_filter ( $filter , 'wptexturize' );
add_filter ( $filter , 'convert_chars' );
add_filter ( $filter , 'esc_html' );
}
2020-05-06 17:23:38 +02:00
// Format WordPress.
2021-07-23 11:58:50 +02:00
foreach ( array ( 'the_content' , 'the_title' , 'wp_title' , 'document_title' ) as $filter ) {
2019-11-02 10:38:58 +01:00
add_filter ( $filter , 'capital_P_dangit' , 11 );
}
add_filter ( 'comment_text' , 'capital_P_dangit' , 31 );
2020-05-06 17:23:38 +02:00
// Format titles.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'single_post_title' , 'single_cat_title' , 'single_tag_title' , 'single_month_title' , 'nav_menu_attr_title' , 'nav_menu_description' ) as $filter ) {
add_filter ( $filter , 'wptexturize' );
add_filter ( $filter , 'strip_tags' );
}
// Format text area for display.
foreach ( array ( 'term_description' , 'get_the_post_type_description' ) as $filter ) {
add_filter ( $filter , 'wptexturize' );
add_filter ( $filter , 'convert_chars' );
add_filter ( $filter , 'wpautop' );
add_filter ( $filter , 'shortcode_unautop' );
}
2020-05-06 17:23:38 +02:00
// Format for RSS.
2019-11-02 10:38:58 +01:00
add_filter ( 'term_name_rss' , 'convert_chars' );
2020-05-06 17:23:38 +02:00
// Pre save hierarchy.
2019-11-02 10:38:58 +01:00
add_filter ( 'wp_insert_post_parent' , 'wp_check_post_hierarchy_for_loops' , 10 , 2 );
add_filter ( 'wp_update_term_parent' , 'wp_check_term_hierarchy_for_loops' , 10 , 3 );
2020-05-06 17:23:38 +02:00
// Display filters.
2019-11-02 10:38:58 +01:00
add_filter ( 'the_title' , 'wptexturize' );
add_filter ( 'the_title' , 'convert_chars' );
add_filter ( 'the_title' , 'trim' );
add_filter ( 'the_content' , 'do_blocks' , 9 );
add_filter ( 'the_content' , 'wptexturize' );
add_filter ( 'the_content' , 'convert_smilies' , 20 );
add_filter ( 'the_content' , 'wpautop' );
add_filter ( 'the_content' , 'shortcode_unautop' );
add_filter ( 'the_content' , 'prepend_attachment' );
2021-04-27 08:32:47 +02:00
add_filter ( 'the_content' , 'wp_replace_insecure_home_url' );
2023-12-07 09:44:11 +01:00
add_filter ( 'the_content' , 'do_shortcode' , 11 ); // AFTER wpautop().
add_filter ( 'the_content' , 'wp_filter_content_tags' , 12 ); // Runs after do_shortcode().
2019-11-02 10:38:58 +01:00
add_filter ( 'the_excerpt' , 'wptexturize' );
add_filter ( 'the_excerpt' , 'convert_smilies' );
add_filter ( 'the_excerpt' , 'convert_chars' );
add_filter ( 'the_excerpt' , 'wpautop' );
add_filter ( 'the_excerpt' , 'shortcode_unautop' );
2021-04-27 08:32:47 +02:00
add_filter ( 'the_excerpt' , 'wp_replace_insecure_home_url' );
2023-12-07 09:44:11 +01:00
add_filter ( 'the_excerpt' , 'wp_filter_content_tags' , 12 );
2019-11-02 10:38:58 +01:00
add_filter ( 'get_the_excerpt' , 'wp_trim_excerpt' , 10 , 2 );
add_filter ( 'the_post_thumbnail_caption' , 'wptexturize' );
add_filter ( 'the_post_thumbnail_caption' , 'convert_smilies' );
add_filter ( 'the_post_thumbnail_caption' , 'convert_chars' );
add_filter ( 'comment_text' , 'wptexturize' );
add_filter ( 'comment_text' , 'convert_chars' );
add_filter ( 'comment_text' , 'make_clickable' , 9 );
add_filter ( 'comment_text' , 'force_balance_tags' , 25 );
add_filter ( 'comment_text' , 'convert_smilies' , 20 );
add_filter ( 'comment_text' , 'wpautop' , 30 );
add_filter ( 'comment_excerpt' , 'convert_chars' );
add_filter ( 'list_cats' , 'wptexturize' );
add_filter ( 'wp_sprintf' , 'wp_sprintf_l' , 10 , 2 );
add_filter ( 'widget_text' , 'balanceTags' );
add_filter ( 'widget_text_content' , 'capital_P_dangit' , 11 );
add_filter ( 'widget_text_content' , 'wptexturize' );
add_filter ( 'widget_text_content' , 'convert_smilies' , 20 );
add_filter ( 'widget_text_content' , 'wpautop' );
add_filter ( 'widget_text_content' , 'shortcode_unautop' );
2021-04-27 08:32:47 +02:00
add_filter ( 'widget_text_content' , 'wp_replace_insecure_home_url' );
2019-11-02 10:38:58 +01:00
add_filter ( 'widget_text_content' , 'do_shortcode' , 11 ); // Runs after wpautop(); note that $post global will be null when shortcodes run.
2023-12-07 09:44:11 +01:00
add_filter ( 'widget_text_content' , 'wp_filter_content_tags' , 12 ); // Runs after do_shortcode().
2019-11-02 10:38:58 +01:00
2021-07-23 11:58:50 +02:00
add_filter ( 'widget_block_content' , 'do_blocks' , 9 );
add_filter ( 'widget_block_content' , 'do_shortcode' , 11 );
2023-12-07 09:44:11 +01:00
add_filter ( 'widget_block_content' , 'wp_filter_content_tags' , 12 ); // Runs after do_shortcode().
2021-07-23 11:58:50 +02:00
add_filter ( 'block_type_metadata' , 'wp_migrate_old_typography_shape' );
2021-04-27 08:32:47 +02:00
add_filter ( 'wp_get_custom_css' , 'wp_replace_insecure_home_url' );
2020-05-06 17:23:38 +02:00
// RSS filters.
2019-11-02 10:38:58 +01:00
add_filter ( 'the_title_rss' , 'strip_tags' );
add_filter ( 'the_title_rss' , 'ent2ncr' , 8 );
add_filter ( 'the_title_rss' , 'esc_html' );
add_filter ( 'the_content_rss' , 'ent2ncr' , 8 );
add_filter ( 'the_content_feed' , 'wp_staticize_emoji' );
add_filter ( 'the_content_feed' , '_oembed_filter_feed_content' );
add_filter ( 'the_excerpt_rss' , 'convert_chars' );
add_filter ( 'the_excerpt_rss' , 'ent2ncr' , 8 );
add_filter ( 'comment_author_rss' , 'ent2ncr' , 8 );
add_filter ( 'comment_text_rss' , 'ent2ncr' , 8 );
add_filter ( 'comment_text_rss' , 'esc_html' );
add_filter ( 'comment_text_rss' , 'wp_staticize_emoji' );
add_filter ( 'bloginfo_rss' , 'ent2ncr' , 8 );
add_filter ( 'the_author' , 'ent2ncr' , 8 );
add_filter ( 'the_guid' , 'esc_url' );
2020-05-06 17:23:38 +02:00
// Email filters.
2019-11-02 10:38:58 +01:00
add_filter ( 'wp_mail' , 'wp_staticize_emoji_for_email' );
2021-04-27 08:32:47 +02:00
// Robots filters.
add_filter ( 'wp_robots' , 'wp_robots_noindex' );
add_filter ( 'wp_robots' , 'wp_robots_noindex_embeds' );
add_filter ( 'wp_robots' , 'wp_robots_noindex_search' );
add_filter ( 'wp_robots' , 'wp_robots_max_image_preview_large' );
2020-05-06 17:23:38 +02:00
// Mark site as no longer fresh.
2021-07-23 11:58:50 +02:00
foreach (
array (
'publish_post' ,
'publish_page' ,
'wp_ajax_save-widget' ,
'wp_ajax_widgets-order' ,
'customize_save_after' ,
'rest_after_save_widget' ,
'rest_delete_widget' ,
'rest_save_sidebar' ,
) as $action
) {
2019-11-02 10:38:58 +01:00
add_action ( $action , '_delete_option_fresh_site' , 0 );
}
2020-05-06 17:23:38 +02:00
// Misc filters.
2025-02-28 08:42:11 +01:00
add_filter ( 'wp_default_autoload_value' , 'wp_filter_default_autoload_value_via_option_size' , 5 , 4 ); // Allow the value to be overridden at the default priority.
2019-11-02 10:38:58 +01:00
add_filter ( 'option_ping_sites' , 'privacy_ping_filter' );
2020-05-06 17:23:38 +02:00
add_filter ( 'option_blog_charset' , '_wp_specialchars' ); // IMPORTANT: This must not be wp_specialchars() or esc_html() or it'll cause an infinite loop.
2019-11-02 10:38:58 +01:00
add_filter ( 'option_blog_charset' , '_canonical_charset' );
add_filter ( 'option_home' , '_config_wp_home' );
add_filter ( 'option_siteurl' , '_config_wp_siteurl' );
add_filter ( 'tiny_mce_before_init' , '_mce_set_direction' );
add_filter ( 'teeny_mce_before_init' , '_mce_set_direction' );
add_filter ( 'pre_kses' , 'wp_pre_kses_less_than' );
2020-01-26 12:53:20 +01:00
add_filter ( 'pre_kses' , 'wp_pre_kses_block_attributes' , 10 , 3 );
2019-11-02 10:38:58 +01:00
add_filter ( 'sanitize_title' , 'sanitize_title_with_dashes' , 10 , 3 );
add_action ( 'check_comment_flood' , 'check_comment_flood_db' , 10 , 4 );
add_filter ( 'comment_flood_filter' , 'wp_throttle_comment_flood' , 10 , 3 );
2019-11-15 22:59:44 +01:00
add_filter ( 'pre_comment_content' , 'wp_rel_ugc' , 15 );
2019-11-02 10:38:58 +01:00
add_filter ( 'comment_email' , 'antispambot' );
add_filter ( 'option_tag_base' , '_wp_filter_taxonomy_base' );
add_filter ( 'option_category_base' , '_wp_filter_taxonomy_base' );
add_filter ( 'the_posts' , '_close_comments_for_old_posts' , 10 , 2 );
add_filter ( 'comments_open' , '_close_comments_for_old_post' , 10 , 2 );
add_filter ( 'pings_open' , '_close_comments_for_old_post' , 10 , 2 );
add_filter ( 'editable_slug' , 'urldecode' );
add_filter ( 'editable_slug' , 'esc_textarea' );
add_filter ( 'pingback_ping_source_uri' , 'pingback_ping_source_uri' );
add_filter ( 'xmlrpc_pingback_error' , 'xmlrpc_pingback_error' );
add_filter ( 'title_save_pre' , 'trim' );
add_action ( 'transition_comment_status' , '_clear_modified_cache_on_transition_comment_status' , 10 , 2 );
add_filter ( 'http_request_host_is_external' , 'allowed_http_request_hosts' , 10 , 2 );
// REST API filters.
add_action ( 'xmlrpc_rsd_apis' , 'rest_output_rsd' );
add_action ( 'wp_head' , 'rest_output_link_wp_head' , 10 , 0 );
add_action ( 'template_redirect' , 'rest_output_link_header' , 11 , 0 );
add_action ( 'auth_cookie_malformed' , 'rest_cookie_collect_status' );
add_action ( 'auth_cookie_expired' , 'rest_cookie_collect_status' );
add_action ( 'auth_cookie_bad_username' , 'rest_cookie_collect_status' );
add_action ( 'auth_cookie_bad_hash' , 'rest_cookie_collect_status' );
add_action ( 'auth_cookie_valid' , 'rest_cookie_collect_status' );
2020-12-10 14:06:04 +01:00
add_action ( 'application_password_failed_authentication' , 'rest_application_password_collect_status' );
2021-04-27 08:32:47 +02:00
add_action ( 'application_password_did_authenticate' , 'rest_application_password_collect_status' , 10 , 2 );
2020-12-10 14:06:04 +01:00
add_filter ( 'rest_authentication_errors' , 'rest_application_password_check_errors' , 90 );
2019-11-02 10:38:58 +01:00
add_filter ( 'rest_authentication_errors' , 'rest_cookie_check_errors' , 100 );
2020-05-06 17:23:38 +02:00
// Actions.
2019-11-02 10:38:58 +01:00
add_action ( 'wp_head' , '_wp_render_title_tag' , 1 );
add_action ( 'wp_head' , 'wp_enqueue_scripts' , 1 );
add_action ( 'wp_head' , 'wp_resource_hints' , 2 );
2022-12-15 17:47:31 +01:00
add_action ( 'wp_head' , 'wp_preload_resources' , 1 );
2019-11-02 10:38:58 +01:00
add_action ( 'wp_head' , 'feed_links' , 2 );
add_action ( 'wp_head' , 'feed_links_extra' , 3 );
add_action ( 'wp_head' , 'rsd_link' );
add_action ( 'wp_head' , 'locale_stylesheet' );
add_action ( 'publish_future_post' , 'check_and_publish_future_post' , 10 , 1 );
2021-04-27 08:32:47 +02:00
add_action ( 'wp_head' , 'wp_robots' , 1 );
2019-11-02 10:38:58 +01:00
add_action ( 'wp_head' , 'print_emoji_detection_script' , 7 );
add_action ( 'wp_head' , 'wp_print_styles' , 8 );
add_action ( 'wp_head' , 'wp_print_head_scripts' , 9 );
add_action ( 'wp_head' , 'wp_generator' );
add_action ( 'wp_head' , 'rel_canonical' );
add_action ( 'wp_head' , 'wp_shortlink_wp_head' , 10 , 0 );
add_action ( 'wp_head' , 'wp_custom_css_cb' , 101 );
add_action ( 'wp_head' , 'wp_site_icon' , 99 );
add_action ( 'wp_footer' , 'wp_print_footer_scripts' , 20 );
add_action ( 'template_redirect' , 'wp_shortlink_header' , 11 , 0 );
add_action ( 'wp_print_footer_scripts' , '_wp_footer_scripts' );
2020-09-15 14:29:22 +02:00
add_action ( 'init' , '_register_core_block_patterns_and_categories' );
2019-11-02 10:38:58 +01:00
add_action ( 'init' , 'check_theme_switched' , 99 );
2020-12-10 14:06:04 +01:00
add_action ( 'init' , array ( 'WP_Block_Supports' , 'init' ), 22 );
2023-04-26 17:39:43 +02:00
add_action ( 'switch_theme' , 'wp_clean_theme_json_cache' );
add_action ( 'start_previewing_theme' , 'wp_clean_theme_json_cache' );
2019-11-02 10:38:58 +01:00
add_action ( 'after_switch_theme' , '_wp_menus_changed' );
add_action ( 'after_switch_theme' , '_wp_sidebars_changed' );
2023-12-07 09:44:11 +01:00
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_emoji_styles' );
add_action ( 'wp_print_styles' , 'print_emoji_styles' ); // Retained for backwards-compatibility. Unhooked by wp_enqueue_emoji_styles().
2019-11-02 10:38:58 +01:00
if ( isset ( $_GET [ 'replytocom' ] ) ) {
2021-04-27 08:32:47 +02:00
add_filter ( 'wp_robots' , 'wp_robots_no_robots' );
2019-11-02 10:38:58 +01:00
}
2020-05-06 17:23:38 +02:00
// Login actions.
2021-04-27 08:32:47 +02:00
add_action ( 'login_head' , 'wp_robots' , 1 );
2019-11-02 10:38:58 +01:00
add_filter ( 'login_head' , 'wp_resource_hints' , 8 );
add_action ( 'login_head' , 'wp_print_head_scripts' , 9 );
add_action ( 'login_head' , 'print_admin_styles' , 9 );
add_action ( 'login_head' , 'wp_site_icon' , 99 );
add_action ( 'login_footer' , 'wp_print_footer_scripts' , 20 );
add_action ( 'login_init' , 'send_frame_options_header' , 10 , 0 );
2020-05-06 17:23:38 +02:00
// Feed generator tags.
2019-11-02 10:38:58 +01:00
foreach ( array ( 'rss2_head' , 'commentsrss2_head' , 'rss_head' , 'rdf_header' , 'atom_head' , 'comments_atom_head' , 'opml_head' , 'app_head' ) as $action ) {
add_action ( $action , 'the_generator' );
}
2020-05-06 17:23:38 +02:00
// Feed Site Icon.
2019-11-02 10:38:58 +01:00
add_action ( 'atom_head' , 'atom_site_icon' );
add_action ( 'rss2_head' , 'rss2_site_icon' );
2020-05-06 17:23:38 +02:00
// WP Cron.
2019-11-02 10:38:58 +01:00
if ( ! defined ( 'DOING_CRON' ) ) {
add_action ( 'init' , 'wp_cron' );
}
2021-04-27 08:32:47 +02:00
// HTTPS migration.
add_action ( 'update_option_home' , 'wp_update_https_migration_required' , 10 , 2 );
2020-05-06 17:23:38 +02:00
// 2 Actions 2 Furious.
2019-11-15 22:59:44 +01:00
add_action ( 'do_feed_rdf' , 'do_feed_rdf' , 10 , 0 );
add_action ( 'do_feed_rss' , 'do_feed_rss' , 10 , 0 );
2019-11-02 10:38:58 +01:00
add_action ( 'do_feed_rss2' , 'do_feed_rss2' , 10 , 1 );
add_action ( 'do_feed_atom' , 'do_feed_atom' , 10 , 1 );
2019-11-15 22:59:44 +01:00
add_action ( 'do_pings' , 'do_all_pings' , 10 , 0 );
2020-12-10 14:06:04 +01:00
add_action ( 'do_all_pings' , 'do_all_pingbacks' , 10 , 0 );
add_action ( 'do_all_pings' , 'do_all_enclosures' , 10 , 0 );
add_action ( 'do_all_pings' , 'do_all_trackbacks' , 10 , 0 );
add_action ( 'do_all_pings' , 'generic_ping' , 10 , 0 );
2019-11-02 10:38:58 +01:00
add_action ( 'do_robots' , 'do_robots' );
2020-05-06 17:23:38 +02:00
add_action ( 'do_favicon' , 'do_favicon' );
2019-11-02 10:38:58 +01:00
add_action ( 'set_comment_cookies' , 'wp_set_comment_cookies' , 10 , 3 );
add_action ( 'sanitize_comment_cookies' , 'sanitize_comment_cookies' );
add_action ( 'init' , 'smilies_init' , 5 );
add_action ( 'plugins_loaded' , 'wp_maybe_load_widgets' , 0 );
add_action ( 'plugins_loaded' , 'wp_maybe_load_embeds' , 0 );
add_action ( 'shutdown' , 'wp_ob_end_flush_all' , 1 );
// Create a revision whenever a post is updated.
2023-12-07 09:44:11 +01:00
add_action ( 'wp_after_insert_post' , 'wp_save_post_revision_on_insert' , 9 , 3 );
2019-11-02 10:38:58 +01:00
add_action ( 'post_updated' , 'wp_save_post_revision' , 10 , 1 );
add_action ( 'publish_post' , '_publish_post_hook' , 5 , 1 );
add_action ( 'transition_post_status' , '_transition_post_status' , 5 , 3 );
add_action ( 'transition_post_status' , '_update_term_count_on_transition_post_status' , 10 , 3 );
add_action ( 'comment_form' , 'wp_comment_form_unfiltered_html_nonce' );
2020-05-06 17:23:38 +02:00
// Privacy.
2019-11-02 10:38:58 +01:00
add_action ( 'user_request_action_confirmed' , '_wp_privacy_account_request_confirmed' );
add_action ( 'user_request_action_confirmed' , '_wp_privacy_send_request_confirmation_notification' , 12 ); // After request marked as completed.
add_filter ( 'wp_privacy_personal_data_exporters' , 'wp_register_comment_personal_data_exporter' );
add_filter ( 'wp_privacy_personal_data_exporters' , 'wp_register_media_personal_data_exporter' );
add_filter ( 'wp_privacy_personal_data_exporters' , 'wp_register_user_personal_data_exporter' , 1 );
add_filter ( 'wp_privacy_personal_data_erasers' , 'wp_register_comment_personal_data_eraser' );
add_action ( 'init' , 'wp_schedule_delete_old_privacy_export_files' );
add_action ( 'wp_privacy_delete_old_export_files' , 'wp_privacy_delete_old_export_files' );
2020-05-06 17:23:38 +02:00
// Cron tasks.
2019-11-02 10:38:58 +01:00
add_action ( 'wp_scheduled_delete' , 'wp_scheduled_delete' );
add_action ( 'wp_scheduled_auto_draft_delete' , 'wp_delete_auto_drafts' );
add_action ( 'importer_scheduled_cleanup' , 'wp_delete_attachment' );
add_action ( 'upgrader_scheduled_cleanup' , 'wp_delete_attachment' );
add_action ( 'delete_expired_transients' , 'delete_expired_transients' );
2020-05-06 17:23:38 +02:00
// Navigation menu actions.
2019-11-02 10:38:58 +01:00
add_action ( 'delete_post' , '_wp_delete_post_menu_item' );
add_action ( 'delete_term' , '_wp_delete_tax_menu_item' , 10 , 3 );
add_action ( 'transition_post_status' , '_wp_auto_add_pages_to_menu' , 10 , 3 );
add_action ( 'delete_post' , '_wp_delete_customize_changeset_dependent_auto_drafts' );
2023-09-26 10:33:34 +02:00
// Post Thumbnail specific image filtering.
2019-11-02 10:38:58 +01:00
add_action ( 'begin_fetch_post_thumbnail_html' , '_wp_post_thumbnail_class_filter_add' );
add_action ( 'end_fetch_post_thumbnail_html' , '_wp_post_thumbnail_class_filter_remove' );
2023-09-26 10:33:34 +02:00
add_action ( 'begin_fetch_post_thumbnail_html' , '_wp_post_thumbnail_context_filter_add' );
add_action ( 'end_fetch_post_thumbnail_html' , '_wp_post_thumbnail_context_filter_remove' );
2019-11-02 10:38:58 +01:00
2020-05-06 17:23:38 +02:00
// Redirect old slugs.
2019-11-02 10:38:58 +01:00
add_action ( 'template_redirect' , 'wp_old_slug_redirect' );
add_action ( 'post_updated' , 'wp_check_for_changed_slugs' , 12 , 3 );
add_action ( 'attachment_updated' , 'wp_check_for_changed_slugs' , 12 , 3 );
2020-05-06 17:23:38 +02:00
// Redirect old dates.
2019-11-02 10:38:58 +01:00
add_action ( 'post_updated' , 'wp_check_for_changed_dates' , 12 , 3 );
add_action ( 'attachment_updated' , 'wp_check_for_changed_dates' , 12 , 3 );
2020-05-06 17:23:38 +02:00
// Nonce check for post previews.
2019-11-02 10:38:58 +01:00
add_action ( 'init' , '_show_post_preview' );
2020-05-06 17:23:38 +02:00
// Output JS to reset window.name for previews.
2019-11-02 10:38:58 +01:00
add_action ( 'wp_head' , 'wp_post_preview_js' , 1 );
2020-05-06 17:23:38 +02:00
// Timezone.
2019-11-02 10:38:58 +01:00
add_filter ( 'pre_option_gmt_offset' , 'wp_timezone_override_offset' );
// If the upgrade hasn't run yet, assume link manager is used.
add_filter ( 'default_option_link_manager_enabled' , '__return_true' );
// This option no longer exists; tell plugins we always support auto-embedding.
add_filter ( 'pre_option_embed_autourls' , '__return_true' );
2020-05-06 17:23:38 +02:00
// Default settings for heartbeat.
2019-11-02 10:38:58 +01:00
add_filter ( 'heartbeat_settings' , 'wp_heartbeat_settings' );
2020-05-06 17:23:38 +02:00
// Check if the user is logged out.
2019-11-02 10:38:58 +01:00
add_action ( 'admin_enqueue_scripts' , 'wp_auth_check_load' );
add_filter ( 'heartbeat_send' , 'wp_auth_check' );
add_filter ( 'heartbeat_nopriv_send' , 'wp_auth_check' );
2020-05-06 17:23:38 +02:00
// Default authentication filters.
2019-11-02 10:38:58 +01:00
add_filter ( 'authenticate' , 'wp_authenticate_username_password' , 20 , 3 );
add_filter ( 'authenticate' , 'wp_authenticate_email_password' , 20 , 3 );
2020-12-10 14:06:04 +01:00
add_filter ( 'authenticate' , 'wp_authenticate_application_password' , 20 , 3 );
2019-11-02 10:38:58 +01:00
add_filter ( 'authenticate' , 'wp_authenticate_spam_check' , 99 );
add_filter ( 'determine_current_user' , 'wp_validate_auth_cookie' );
add_filter ( 'determine_current_user' , 'wp_validate_logged_in_cookie' , 20 );
2020-12-10 14:06:04 +01:00
add_filter ( 'determine_current_user' , 'wp_validate_application_password' , 20 );
2019-11-02 10:38:58 +01:00
// Split term updates.
add_action ( 'admin_init' , '_wp_check_for_scheduled_split_terms' );
add_action ( 'split_shared_term' , '_wp_check_split_default_terms' , 10 , 4 );
add_action ( 'split_shared_term' , '_wp_check_split_terms_in_menus' , 10 , 4 );
add_action ( 'split_shared_term' , '_wp_check_split_nav_menu_terms' , 10 , 4 );
add_action ( 'wp_split_shared_term_batch' , '_wp_batch_split_terms' );
2020-09-15 14:29:22 +02:00
// Comment type updates.
add_action ( 'admin_init' , '_wp_check_for_scheduled_update_comment_type' );
add_action ( 'wp_update_comment_type_batch' , '_wp_batch_update_comment_type' );
2019-11-02 10:38:58 +01:00
// Email notifications.
add_action ( 'comment_post' , 'wp_new_comment_notify_moderator' );
add_action ( 'comment_post' , 'wp_new_comment_notify_postauthor' );
add_action ( 'after_password_reset' , 'wp_password_change_notification' );
add_action ( 'register_new_user' , 'wp_send_new_user_notifications' );
add_action ( 'edit_user_created_user' , 'wp_send_new_user_notifications' , 10 , 2 );
// REST API actions.
add_action ( 'init' , 'rest_api_init' );
add_action ( 'rest_api_init' , 'rest_api_default_filters' , 10 , 1 );
add_action ( 'rest_api_init' , 'register_initial_settings' , 10 );
add_action ( 'rest_api_init' , 'create_initial_rest_routes' , 99 );
add_action ( 'parse_request' , 'rest_api_loaded' );
2020-09-15 14:29:22 +02:00
// Sitemaps actions.
add_action ( 'init' , 'wp_sitemaps_get_server' );
2019-11-02 10:38:58 +01:00
/**
2020-05-06 17:23:38 +02:00
* Filters formerly mixed into wp - includes .
2019-11-02 10:38:58 +01:00
*/
2020-05-06 17:23:38 +02:00
// Theme.
2020-09-15 14:29:22 +02:00
add_action ( 'setup_theme' , 'create_initial_theme_features' , 0 );
2023-12-07 09:44:11 +01:00
add_action ( 'after_setup_theme' , '_add_default_theme_supports' , 1 );
2019-11-02 10:38:58 +01:00
add_action ( 'wp_loaded' , '_custom_header_background_just_in_time' );
add_action ( 'wp_head' , '_custom_logo_header_styles' );
add_action ( 'plugins_loaded' , '_wp_customize_include' );
add_action ( 'transition_post_status' , '_wp_customize_publish_changeset' , 10 , 3 );
add_action ( 'admin_enqueue_scripts' , '_wp_customize_loader_settings' );
add_action ( 'delete_attachment' , '_delete_attachment_theme_mod' );
add_action ( 'transition_post_status' , '_wp_keep_alive_customize_changeset_dependent_auto_drafts' , 20 , 3 );
2023-12-07 09:44:11 +01:00
// Block Theme Previews.
add_action ( 'plugins_loaded' , 'wp_initialize_theme_preview_hooks' , 1 );
2020-05-06 17:23:38 +02:00
// Calendar widget cache.
2019-11-02 10:38:58 +01:00
add_action ( 'save_post' , 'delete_get_calendar_cache' );
add_action ( 'delete_post' , 'delete_get_calendar_cache' );
add_action ( 'update_option_start_of_week' , 'delete_get_calendar_cache' );
add_action ( 'update_option_gmt_offset' , 'delete_get_calendar_cache' );
2020-05-06 17:23:38 +02:00
// Author.
2019-11-02 10:38:58 +01:00
add_action ( 'transition_post_status' , '__clear_multi_author_cache' );
2020-05-06 17:23:38 +02:00
// Post.
add_action ( 'init' , 'create_initial_post_types' , 0 ); // Highest priority.
2019-11-02 10:38:58 +01:00
add_action ( 'admin_menu' , '_add_post_type_submenus' );
add_action ( 'before_delete_post' , '_reset_front_page_settings_for_post' );
add_action ( 'wp_trash_post' , '_reset_front_page_settings_for_post' );
add_action ( 'change_locale' , 'create_initial_post_types' );
2020-05-06 17:23:38 +02:00
// Post Formats.
2019-11-02 10:38:58 +01:00
add_filter ( 'request' , '_post_format_request' );
add_filter ( 'term_link' , '_post_format_link' , 10 , 3 );
add_filter ( 'get_post_format' , '_post_format_get_term' );
add_filter ( 'get_terms' , '_post_format_get_terms' , 10 , 3 );
add_filter ( 'wp_get_object_terms' , '_post_format_wp_get_object_terms' );
2020-05-06 17:23:38 +02:00
// KSES.
2019-11-02 10:38:58 +01:00
add_action ( 'init' , 'kses_init' );
add_action ( 'set_current_user' , 'kses_init' );
2020-05-06 17:23:38 +02:00
// Script Loader.
2019-11-02 10:38:58 +01:00
add_action ( 'wp_default_scripts' , 'wp_default_scripts' );
add_action ( 'wp_default_scripts' , 'wp_default_packages' );
2025-02-28 08:42:11 +01:00
add_action ( 'wp_default_scripts' , 'wp_default_script_modules' );
2019-11-02 10:38:58 +01:00
add_action ( 'wp_enqueue_scripts' , 'wp_localize_jquery_ui_datepicker' , 1000 );
add_action ( 'wp_enqueue_scripts' , 'wp_common_block_scripts_and_styles' );
2022-12-15 17:47:31 +01:00
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_classic_theme_styles' );
2021-07-23 11:58:50 +02:00
add_action ( 'admin_enqueue_scripts' , 'wp_localize_jquery_ui_datepicker' , 1000 );
2019-11-02 10:38:58 +01:00
add_action ( 'admin_enqueue_scripts' , 'wp_common_block_scripts_and_styles' );
add_action ( 'enqueue_block_assets' , 'wp_enqueue_registered_block_scripts_and_styles' );
2021-07-23 11:58:50 +02:00
add_action ( 'enqueue_block_assets' , 'enqueue_block_styles_assets' , 30 );
2023-09-26 10:33:34 +02:00
/*
* `wp_enqueue_registered_block_scripts_and_styles` is bound to both
* `enqueue_block_editor_assets` and `enqueue_block_assets` hooks
* since the introduction of the block editor in WordPress 5.0 .
*
* The way this works is that the block assets are loaded before any other assets .
* For example , this is the order of styles for the editor :
*
* - front styles registered for blocks , via `styles` handle ( block . json )
* - editor styles registered for blocks , via `editorStyles` handle ( block . json )
* - editor styles enqueued via `enqueue_block_editor_assets` hook
* - front styles enqueued via `enqueue_block_assets` hook
*/
2019-11-02 10:38:58 +01:00
add_action ( 'enqueue_block_editor_assets' , 'wp_enqueue_registered_block_scripts_and_styles' );
2021-07-23 11:58:50 +02:00
add_action ( 'enqueue_block_editor_assets' , 'enqueue_editor_block_styles_assets' );
add_action ( 'enqueue_block_editor_assets' , 'wp_enqueue_editor_block_directory_assets' );
add_action ( 'enqueue_block_editor_assets' , 'wp_enqueue_editor_format_library_assets' );
2022-04-02 10:26:41 +02:00
add_action ( 'enqueue_block_editor_assets' , 'wp_enqueue_global_styles_css_custom_properties' );
2023-09-26 10:33:34 +02:00
add_action ( 'wp_print_scripts' , 'wp_just_in_time_script_localization' );
2019-11-02 10:38:58 +01:00
add_filter ( 'print_scripts_array' , 'wp_prototype_before_jquery' );
2023-09-26 10:33:34 +02:00
add_action ( 'customize_controls_print_styles' , 'wp_resource_hints' , 1 );
2021-07-23 11:58:50 +02:00
add_action ( 'admin_head' , 'wp_check_widget_editor_deps' );
2022-12-15 17:47:31 +01:00
add_filter ( 'block_editor_settings_all' , 'wp_add_editor_classic_theme_styles' );
2021-07-23 11:58:50 +02:00
// Global styles can be enqueued in both the header and the footer. See https://core.trac.wordpress.org/ticket/53494.
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_global_styles' );
add_action ( 'wp_footer' , 'wp_enqueue_global_styles' , 1 );
2019-11-02 10:38:58 +01:00
2022-12-15 17:47:31 +01:00
// Block supports, and other styles parsed and stored in the Style Engine.
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_stored_styles' );
add_action ( 'wp_footer' , 'wp_enqueue_stored_styles' , 1 );
2019-11-02 10:38:58 +01:00
add_action ( 'wp_default_styles' , 'wp_default_styles' );
add_filter ( 'style_loader_src' , 'wp_style_loader_src' , 10 , 2 );
2025-02-28 08:42:11 +01:00
add_action ( 'wp_head' , 'wp_print_auto_sizes_contain_css_fix' , 1 );
2021-07-23 11:58:50 +02:00
add_action ( 'wp_head' , 'wp_maybe_inline_styles' , 1 ); // Run for styles enqueued in <head>.
add_action ( 'wp_footer' , 'wp_maybe_inline_styles' , 1 ); // Run for late-loaded styles in the footer.
2023-12-07 09:44:11 +01:00
/*
* Block specific actions and filters .
*/
// Footnotes Block.
add_action ( 'init' , '_wp_footnotes_kses_init' );
add_action ( 'set_current_user' , '_wp_footnotes_kses_init' );
add_filter ( 'force_filtered_html_on_import' , '_wp_footnotes_force_filtered_html_on_import_filter' , 999 );
2022-04-02 10:26:41 +02:00
/*
* Disable " Post Attributes " for wp_navigation post type . The attributes are
* also conditionally enabled when a site has custom templates . Block Theme
* templates can be available for every post type .
*/
add_filter ( 'theme_wp_navigation_templates' , '__return_empty_array' );
2021-07-23 11:58:50 +02:00
2020-05-06 17:23:38 +02:00
// Taxonomy.
add_action ( 'init' , 'create_initial_taxonomies' , 0 ); // Highest priority.
2019-11-02 10:38:58 +01:00
add_action ( 'change_locale' , 'create_initial_taxonomies' );
2020-05-06 17:23:38 +02:00
// Canonical.
2019-11-02 10:38:58 +01:00
add_action ( 'template_redirect' , 'redirect_canonical' );
add_action ( 'template_redirect' , 'wp_redirect_admin_locations' , 1000 );
2020-05-06 17:23:38 +02:00
// Media.
2019-11-02 10:38:58 +01:00
add_action ( 'wp_playlist_scripts' , 'wp_playlist_scripts' );
add_action ( 'customize_controls_enqueue_scripts' , 'wp_plupload_default_settings' );
2019-11-15 22:59:44 +01:00
add_action ( 'plugins_loaded' , '_wp_add_additional_image_sizes' , 0 );
2020-09-15 14:29:22 +02:00
add_filter ( 'plupload_default_settings' , 'wp_show_heic_upload_error' );
2019-11-02 10:38:58 +01:00
2020-05-06 17:23:38 +02:00
// Nav menu.
2019-11-02 10:38:58 +01:00
add_filter ( 'nav_menu_item_id' , '_nav_menu_item_id_use_once' , 10 , 2 );
2023-04-26 17:39:43 +02:00
add_filter ( 'nav_menu_css_class' , 'wp_nav_menu_remove_menu_item_has_children_class' , 10 , 4 );
2019-11-02 10:38:58 +01:00
2020-05-06 17:23:38 +02:00
// Widgets.
2021-07-23 11:58:50 +02:00
add_action ( 'after_setup_theme' , 'wp_setup_widgets_block_editor' , 1 );
2019-11-02 10:38:58 +01:00
add_action ( 'init' , 'wp_widgets_init' , 1 );
2022-06-16 14:03:35 +02:00
add_action ( 'change_locale' , array ( 'WP_Widget_Media' , 'reset_default_labels' ) );
2023-04-26 17:39:43 +02:00
add_action ( 'widgets_init' , '_wp_block_theme_register_classic_sidebars' , 1 );
2019-11-02 10:38:58 +01:00
2020-05-06 17:23:38 +02:00
// Admin Bar.
2019-11-02 10:38:58 +01:00
// Don't remove. Wrong way to disable.
add_action ( 'template_redirect' , '_wp_admin_bar_init' , 0 );
add_action ( 'admin_init' , '_wp_admin_bar_init' );
2023-12-07 09:44:11 +01:00
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_admin_bar_bump_styles' );
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_admin_bar_header_styles' );
add_action ( 'admin_enqueue_scripts' , 'wp_enqueue_admin_bar_header_styles' );
2019-11-02 10:38:58 +01:00
add_action ( 'before_signup_header' , '_wp_admin_bar_init' );
add_action ( 'activate_header' , '_wp_admin_bar_init' );
2020-05-06 17:23:38 +02:00
add_action ( 'wp_body_open' , 'wp_admin_bar_render' , 0 );
add_action ( 'wp_footer' , 'wp_admin_bar_render' , 1000 ); // Back-compat for themes not using `wp_body_open`.
2019-11-02 10:38:58 +01:00
add_action ( 'in_admin_header' , 'wp_admin_bar_render' , 0 );
2020-05-06 17:23:38 +02:00
// Former admin filters that can also be hooked on the front end.
2019-11-02 10:38:58 +01:00
add_action ( 'media_buttons' , 'media_buttons' );
add_filter ( 'image_send_to_editor' , 'image_add_caption' , 20 , 8 );
add_filter ( 'media_send_to_editor' , 'image_media_send_to_editor' , 10 , 3 );
2020-05-06 17:23:38 +02:00
// Embeds.
2019-11-02 10:38:58 +01:00
add_action ( 'rest_api_init' , 'wp_oembed_register_route' );
add_filter ( 'rest_pre_serve_request' , '_oembed_rest_pre_serve_request' , 10 , 4 );
add_action ( 'wp_head' , 'wp_oembed_add_discovery_links' );
2022-04-02 10:26:41 +02:00
add_action ( 'wp_head' , 'wp_oembed_add_host_js' ); // Back-compat for sites disabling oEmbed host JS by removing action.
add_filter ( 'embed_oembed_html' , 'wp_maybe_enqueue_oembed_host_js' );
2019-11-02 10:38:58 +01:00
add_action ( 'embed_head' , 'enqueue_embed_scripts' , 1 );
add_action ( 'embed_head' , 'print_emoji_detection_script' );
2023-12-07 09:44:11 +01:00
add_action ( 'embed_head' , 'wp_enqueue_embed_styles' , 9 );
add_action ( 'embed_head' , 'print_embed_styles' ); // Retained for backwards-compatibility. Unhooked by wp_enqueue_embed_styles().
2019-11-02 10:38:58 +01:00
add_action ( 'embed_head' , 'wp_print_head_scripts' , 20 );
add_action ( 'embed_head' , 'wp_print_styles' , 20 );
2021-04-27 08:32:47 +02:00
add_action ( 'embed_head' , 'wp_robots' );
2019-11-02 10:38:58 +01:00
add_action ( 'embed_head' , 'rel_canonical' );
add_action ( 'embed_head' , 'locale_stylesheet' , 30 );
2024-02-16 11:03:01 +01:00
add_action ( 'enqueue_embed_scripts' , 'wp_enqueue_emoji_styles' );
2019-11-02 10:38:58 +01:00
add_action ( 'embed_content_meta' , 'print_embed_comments_button' );
add_action ( 'embed_content_meta' , 'print_embed_sharing_button' );
add_action ( 'embed_footer' , 'print_embed_sharing_dialog' );
add_action ( 'embed_footer' , 'print_embed_scripts' );
add_action ( 'embed_footer' , 'wp_print_footer_scripts' , 20 );
add_filter ( 'excerpt_more' , 'wp_embed_excerpt_more' , 20 );
add_filter ( 'the_excerpt_embed' , 'wptexturize' );
add_filter ( 'the_excerpt_embed' , 'convert_chars' );
add_filter ( 'the_excerpt_embed' , 'wpautop' );
add_filter ( 'the_excerpt_embed' , 'shortcode_unautop' );
add_filter ( 'the_excerpt_embed' , 'wp_embed_excerpt_attachment' );
2020-06-23 13:49:54 +02:00
add_filter ( 'oembed_dataparse' , 'wp_filter_oembed_iframe_title_attribute' , 5 , 3 );
2019-11-02 10:38:58 +01:00
add_filter ( 'oembed_dataparse' , 'wp_filter_oembed_result' , 10 , 3 );
add_filter ( 'oembed_response_data' , 'get_oembed_response_data_rich' , 10 , 4 );
add_filter ( 'pre_oembed_result' , 'wp_filter_pre_oembed_result' , 10 , 3 );
2020-05-06 17:23:38 +02:00
// Capabilities.
2019-11-02 10:38:58 +01:00
add_filter ( 'user_has_cap' , 'wp_maybe_grant_install_languages_cap' , 1 );
add_filter ( 'user_has_cap' , 'wp_maybe_grant_resume_extensions_caps' , 1 );
add_filter ( 'user_has_cap' , 'wp_maybe_grant_site_health_caps' , 1 , 4 );
2022-04-02 10:26:41 +02:00
// Block templates post type and rendering.
2021-07-23 11:58:50 +02:00
add_filter ( 'render_block_context' , '_block_template_render_without_post_block_context' );
add_filter ( 'pre_wp_unique_post_slug' , 'wp_filter_wp_template_unique_post_slug' , 10 , 5 );
2022-04-02 10:26:41 +02:00
add_action ( 'save_post_wp_template_part' , 'wp_set_unique_slug_on_create_template_part' );
2023-12-07 09:44:11 +01:00
add_action ( 'wp_enqueue_scripts' , 'wp_enqueue_block_template_skip_link' );
add_action ( 'wp_footer' , 'the_block_template_skip_link' ); // Retained for backwards-compatibility. Unhooked by wp_enqueue_block_template_skip_link().
add_action ( 'after_setup_theme' , 'wp_enable_block_templates' , 1 );
2022-04-02 10:26:41 +02:00
add_action ( 'wp_loaded' , '_add_template_loader_filters' );
2021-07-23 11:58:50 +02:00
2023-12-07 09:44:11 +01:00
// wp_navigation post type.
add_filter ( 'rest_wp_navigation_item_schema' , array ( 'WP_Navigation_Fallback' , 'update_wp_navigation_post_schema' ) );
2022-12-15 17:47:31 +01:00
// Fluid typography.
add_filter ( 'render_block' , 'wp_render_typography_support' , 10 , 2 );
// User preferences.
add_action ( 'init' , 'wp_register_persisted_preferences_meta' );
2023-09-26 10:33:34 +02:00
// CPT wp_block custom postmeta field.
add_action ( 'init' , 'wp_create_initial_post_meta' );
2023-12-07 09:44:11 +01:00
// Include revisioned meta when considering whether a post revision has changed.
add_filter ( 'wp_save_post_revision_post_has_changed' , 'wp_check_revisioned_meta_fields_have_changed' , 10 , 3 );
// Save revisioned post meta immediately after a revision is saved
add_action ( '_wp_put_post_revision' , 'wp_save_revisioned_meta_fields' , 10 , 2 );
// Include revisioned meta when creating or updating an autosave revision.
add_action ( 'wp_creating_autosave' , 'wp_autosave_post_revisioned_meta_fields' );
// When restoring revisions, also restore revisioned meta.
add_action ( 'wp_restore_post_revision' , 'wp_restore_post_revision_meta' , 10 , 2 );
// Font management.
add_action ( 'wp_head' , 'wp_print_font_faces' , 50 );
2024-04-17 11:32:24 +02:00
add_action ( 'deleted_post' , '_wp_after_delete_font_family' , 10 , 2 );
add_action ( 'before_delete_post' , '_wp_before_delete_font_face' , 10 , 2 );
add_action ( 'init' , '_wp_register_default_font_collections' );
// Add ignoredHookedBlocks metadata attribute to the template and template part post types.
2025-02-28 08:42:11 +01:00
add_filter ( 'rest_pre_insert_wp_template' , 'inject_ignored_hooked_blocks_metadata_attributes' );
add_filter ( 'rest_pre_insert_wp_template_part' , 'inject_ignored_hooked_blocks_metadata_attributes' );
// Update ignoredHookedBlocks postmeta for wp_navigation post type.
add_filter ( 'rest_pre_insert_wp_navigation' , 'update_ignored_hooked_blocks_postmeta' );
// Inject hooked blocks into the wp_navigation post type REST response.
add_filter ( 'rest_prepare_wp_navigation' , 'insert_hooked_blocks_into_rest_response' , 10 , 2 );
2023-12-07 09:44:11 +01:00
2019-11-02 10:38:58 +01:00
unset ( $filter , $action );