Using WordPress ‘admin_post’ PHP action

The admin_post WordPress PHP action is triggered when an authenticated admin makes a POST request without supplying an action.

Usage

add_action('admin_post', 'your_custom_function');
function your_custom_function() {
    // your custom code here
}

Parameters

No parameters for this action.

More information

See WordPress Developer Resources: admin_post

Examples

Save Custom Settings

In this example, we create a custom function to save settings from a custom admin form.

add_action('admin_post_save_custom_settings', 'save_custom_settings');

function save_custom_settings() {
    // Check nonce for security
    check_admin_referer('custom_settings_nonce');

    // Save the custom setting
    update_option('custom_setting', sanitize_text_field($_POST['custom_setting']));

    // Redirect back to the settings page
    wp_redirect(admin_url('options-general.php?page=custom_settings'));
    exit;
}

Add Custom Post Meta

In this example, we create a function to add custom post meta from an admin form.

add_action('admin_post_add_custom_meta', 'add_custom_meta');

function add_custom_meta() {
    // Check nonce for security
    check_admin_referer('add_custom_meta_nonce');

    // Add custom post meta
    add_post_meta($_POST['post_id'], 'custom_meta_key', sanitize_text_field($_POST['custom_meta_value']));

    // Redirect back to the edit post page
    wp_redirect(admin_url('post.php?post=' . intval($_POST['post_id']) . '&action=edit'));
    exit;
}

Delete Custom Post Type

In this example, we create a function to delete a custom post type from the admin area.

add_action('admin_post_delete_custom_post', 'delete_custom_post');

function delete_custom_post() {
    // Check nonce for security
    check_admin_referer('delete_custom_post_nonce');

    // Delete custom post type
    wp_delete_post($_POST['post_id'], true);

    // Redirect back to the custom post type listing page
    wp_redirect(admin_url('edit.php?post_type=custom_post_type'));
    exit;
}

Add Custom Taxonomy Term

In this example, we create a function to add a custom taxonomy term from the admin area.

add_action('admin_post_add_custom_taxonomy_term', 'add_custom_taxonomy_term');

function add_custom_taxonomy_term() {
    // Check nonce for security
    check_admin_referer('add_custom_taxonomy_term_nonce');

    // Add custom taxonomy term
    wp_insert_term(sanitize_text_field($_POST['term_name']), 'custom_taxonomy');

    // Redirect back to the taxonomy management page
    wp_redirect(admin_url('edit-tags.php?taxonomy=custom_taxonomy'));
    exit;
}