admin_init │ action-hook │ WP 2.5.0

Fires when an admin screen or a WordPress service request (ajax) is initialized.

The action fires not only on admin pages, but also in admin-ajax.php and admin-post.php.

The general init action fires earlier.

admin_init may fire for an unauthenticated AJAX or admin-post.php request. For protected operations, check the user's capabilities and nonce separately.

The current admin screen is set after admin_init.

If you need the screen object, use the current_screen action or the dynamic load-{page_hook} action.

Usage

add_action( 'admin_init', 'wp_kama_admin_init_action' );

/**
 * Function for `admin_init` action-hook.
 * 
 * @return void
 */
function wp_kama_admin_init_action(){
	// action...
}

Examples

#1 Registering a plugin setting

Let's register a numeric option through the Settings API.

add_action( 'admin_init', 'wp_kama_register_settings' );

function wp_kama_register_settings() {
	register_setting(
		'wp_kama_settings',
		'wp_kama_items_per_page',
		[
			'type'              => 'integer',
			'sanitize_callback' => 'absint',
			'default'           => 10,
		]
	);
}

Changelog

Since 2.5.0 Introduced.

Where the hook is called

In file: /wp-admin/admin.php
admin_init
wp-admin/admin.php 180
do_action( 'admin_init' );
wp-admin/admin-ajax.php 45
do_action( 'admin_init' );
wp-admin/admin-post.php 27
do_action( 'admin_init' );

Where the hook is used in WordPress

wp-admin/includes/admin-filters.php 120
add_action( 'admin_init', 'default_password_nag_handler' );
wp-admin/includes/admin-filters.php 158
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'text_change_check' ), 100 );
wp-admin/includes/admin-filters.php 164
add_action( 'admin_init', array( 'WP_Privacy_Policy_Content', 'add_suggested_content' ), 1 );
wp-admin/includes/admin-filters.php 41
add_action( 'admin_init', 'register_admin_color_schemes', 1 );
wp-admin/includes/admin-filters.php 46
add_action( 'admin_init', 'wp_admin_headers' );
wp-admin/includes/admin-filters.php 47
add_action( 'admin_init', 'send_frame_options_header', 10, 0 );
wp-includes/blocks/legacy-widget.php 157
add_action( 'admin_init', 'handle_legacy_widget_preview_iframe', 20 );
wp-includes/build/pages/font-library/page.php 335
add_action( 'admin_init', 'wp_font_library_intercept_render' );
wp-includes/build/pages/options-connectors/page.php 335
add_action( 'admin_init', 'wp_options_connectors_intercept_render' );
wp-includes/class-wp-customize-manager.php 381
remove_action( 'admin_init', '_maybe_update_core' );
wp-includes/class-wp-customize-manager.php 382
remove_action( 'admin_init', '_maybe_update_plugins' );
wp-includes/class-wp-customize-manager.php 383
remove_action( 'admin_init', '_maybe_update_themes' );
wp-includes/default-filters.php 118
add_action( 'admin_init', 'wp_schedule_update_user_counts' );
wp-includes/default-filters.php 525
add_action( 'admin_init', '_wp_check_for_scheduled_split_terms' );
wp-includes/default-filters.php 532
add_action( 'admin_init', '_wp_check_for_scheduled_update_comment_type' );
wp-includes/default-filters.php 697
add_action( 'admin_init', 'wp_set_client_side_media_processing_flag' );
wp-includes/default-filters.php 716
add_action( 'admin_init', '_wp_admin_bar_init' );
wp-includes/deprecated.php 5887
add_action( 'admin_init', $fn_generate_and_enqueue_editor_styles );
wp-includes/ms-default-filters.php 84
add_action( 'admin_init', 'wp_schedule_update_network_counts' );
wp-includes/ms-default-filters.php 91
remove_action( 'admin_init', 'wp_schedule_update_user_counts' );
wp-includes/update.php 1191
add_action( 'admin_init', '_maybe_update_core' );
wp-includes/update.php 1197
add_action( 'admin_init', '_maybe_update_plugins' );
wp-includes/update.php 1203
add_action( 'admin_init', '_maybe_update_themes' );