Is there a way to set default custom fields when creating a post?

When I’m creating a new post, just after clicking “Add New”, when the post editor shows, instead of having to use the dropdown and choose a custom field to use, I’d like to have some default custom field inputs already openend.

Visually, instead of :

enter image description here

I’d like to have something like :

enter image description here

I know there are plugins for that (CPT, More fields, etc.) but I’d like a simple way to do it with a basic function.

I tried something like this (I’m using a custom post type ‘product’ ) :

function register_custom_fields( $post_ID ) {

    global $wpdb;

        if( !wp_is_post_revision( $post_ID ) ) {

            add_post_meta( $post_ID, 'reference', '', true);
            add_post_meta( $post_ID, 'price', '', true);



add_action('edit_product', 'register_custom_fields');

But that doesn’t seem to work. I think that the hook is probably wrong (because edit_post comes after an update), but I don’t see any hook for “new post” (right after user clicks on “new post” in wp admin). Is there any ?

Or maybe the whole idea is wrong and there’s another way?


The action hook save_post is called on save, but i don’t know if you can add metadata at this time. But it should be possible to create/update your meta data after the post was saved with the action hook updated_post_meta.


To pre-select some meta fields (custom fields) on the post creation screen, you have to add these meta values first with an empty value.

If you look at the post_custom_meta_box() function (which is the callback for the used metabox postcustom) in the file wp-admin/includes/meta-boxes.php, you can see that the function is using list_meta() to create the pre-selected meta fields.

Now lets take a look at the program flow until this metabox is displayed (We’re looking for a action/filter hook we can use here):

  1. WordPress loads the file post-new.php
  2. This file generates a default post in the database on line 39 with the function get_default_post_to_edit(). Thats nice. Basically the post is already in the database as an auto-draft. Unfortunately there isn’t any hook at this time to alter these data or add something new.
  3. As a next step, the file edit-form-advaned.php is included. This file will generate the hole admin page and includes all required metaboxes based on the supports parameter of the post type.
  4. On line 136 the custom fields metabox postcustom is included and the above function is called. Again, no action hook which we could use.


I think the only way you can do is to use jQuery or overload the postcustom metabox and add the meta values before you run the list_meta() function.


add_action('admin_menu', 'wpse29358_replaceMetaBoxes'); // maybe add_meta_boxes hook
function wpse29358_replaceMetaBoxes() {
    remove_meta_box('postcustom', {POST_TYPE}, 'normal');
    add_meta_box('postcustom', __('Custom Fields'), 'wpse29358_postcustomMetabox', {POST_TYPE}, 'normal', 'core');

function wpse29358_postcustomMetabox($post) {
    // Add your meta data to the post with the ID $post->ID
    add_post_meta($post->ID, 'key', 'value');

    // and then copy&past the metabox content from the function post_custom_meta_box()

Leave a Comment