Using WordPress ‘auth_post_{$post_type}_meta_{$meta_key}’ PHP filter

The auth_post_{$post_type}_meta_{$meta_key} WordPress PHP filter allows you to control whether a user is allowed to add post meta to a post of a given type. The dynamic portions of the hook name, $meta_key and $post_type, refer to the meta key passed to map_meta_cap() and the post type, respectively.

Usage

add_filter( 'auth_post_{$post_type}_meta_{$meta_key}', 'your_custom_function', 10, 6 );

function your_custom_function( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    // your custom code here

    return $allowed;
}

Parameters

  • $allowed (bool): Whether the user can add the post meta. Default false.
  • $meta_key (string): The meta key.
  • $post_id (int): Post ID.
  • $user_id (int): User ID.
  • $cap (string): Capability name.
  • $caps (array): User capabilities.

More information

See WordPress Developer Resources: auth_post_{$post_type}meta{$meta_key}

Examples

Allow adding ‘special_meta_key’ only for admins

This example allows only administrators to add the ‘special_meta_key’ to any post type.

add_filter( 'auth_post_{$post_type}_meta_special_meta_key', 'allow_special_meta_key_for_admins', 10, 6 );

function allow_special_meta_key_for_admins( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    if ( current_user_can( 'manage_options' ) ) {
        return true;
    }

    return $allowed;
}

Disallow adding ‘_private_meta_key’ for all users

This example disallows all users from adding the ‘_private_meta_key’ to any post type.

add_filter( 'auth_post_{$post_type}_meta__private_meta_key', 'disallow_private_meta_key', 10, 6 );

function disallow_private_meta_key( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    return false;
}

Allow adding ‘rating_meta_key’ only for specific post type

This example allows users to add the ‘rating_meta_key’ only to the ‘review’ post type.

add_filter( 'auth_post_review_meta_rating_meta_key', 'allow_rating_meta_key_for_reviews', 10, 6 );

function allow_rating_meta_key_for_reviews( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    return true;
}

This example allows users with the ‘editor’ role to add the ‘featured_image_meta_key’ to any post type.

add_filter( 'auth_post_{$post_type}_meta_featured_image_meta_key', 'allow_featured_image_meta_key_for_editors', 10, 6 );

function allow_featured_image_meta_key_for_editors( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    $user = get_userdata( $user_id );

    if ( in_array( 'editor', (array) $user->roles ) ) {
        return true;
    }

    return $allowed;
}

Allow adding ‘location_meta_key’ only for specific user ID

This example allows only the user with ID 42 to add the ‘location_meta_key’ to any post type.

add_filter( 'auth_post_{$post_type}_meta_location_meta_key', 'allow_location_meta_key_for_specific_user', 10, 6 );

function allow_location_meta_key_for_specific_user( $allowed, $meta_key, $post_id, $user_id, $cap, $caps ) {
    if ( $user_id == 42 ) {
        return true;
    }

    return $allowed;
}