postmeta_form_keys is a WordPress PHP filter that modifies the meta key dropdown values in the Custom Fields meta box. By returning a non-null value, you can avoid an expensive query against the postmeta table.
Usage
add_filter('postmeta_form_keys', 'my_custom_postmeta_keys', 10, 2); function my_custom_postmeta_keys($keys, $post) { // your custom code here return $keys; }
Parameters
- $keys (array|null): Pre-defined meta keys to be used instead of a postmeta query. Default is null.
- $post (WP_Post): The current post object.
More information
See WordPress Developer Resources: postmeta_form_keys
Examples
Adding Custom Meta Keys to Dropdown
This example adds custom meta keys to the dropdown list in the Custom Fields meta box.
add_filter('postmeta_form_keys', 'add_custom_meta_keys', 10, 2); function add_custom_meta_keys($keys, $post) { $custom_keys = array('custom_key_1', 'custom_key_2', 'custom_key_3'); return array_merge($keys, $custom_keys); }
Restricting Meta Keys Based on User Role
This example restricts the available meta keys in the dropdown based on the user’s role.
add_filter('postmeta_form_keys', 'restrict_meta_keys_by_role', 10, 2); function restrict_meta_keys_by_role($keys, $post) { $user = wp_get_current_user(); if (in_array('editor', $user->roles)) { return array('editor_key_1', 'editor_key_2'); } elseif (in_array('author', $user->roles)) { return array('author_key_1', 'author_key_2'); } return $keys; }
Adding Post-specific Meta Keys
This example adds post-specific meta keys to the dropdown based on the post type.
add_filter('postmeta_form_keys', 'add_post_specific_meta_keys', 10, 2); function add_post_specific_meta_keys($keys, $post) { if ($post->post_type == 'custom_post_type') { $custom_keys = array('cpt_key_1', 'cpt_key_2'); return array_merge($keys, $custom_keys); } return $keys; }
Removing Default Meta Keys
This example removes the default meta keys from the dropdown list.
add_filter('postmeta_form_keys', 'remove_default_meta_keys', 10, 2); function remove_default_meta_keys($keys, $post) { return array(); }
Using Post ID to Filter Meta Keys
This example filters the meta keys in the dropdown based on the post ID.
add_filter('postmeta_form_keys', 'filter_meta_keys_by_post_id', 10, 2); function filter_meta_keys_by_post_id($keys, $post) { if ($post->ID == 123) { $custom_keys = array('post_123_key_1', 'post_123_key_2'); return array_merge($keys, $custom_keys); } return $keys; }