7

I'm trying to read the custom fields set by the user when publishing a new post:

function doSomething($post) {

   $meta = get_post_meta($post->ID);

   error_log("post meta: ".print_r($meta, true));

}

add_action("new_to_publish", "doSomething", 999);
add_action("draft_to_publish", "doSomething", 999);
add_action("pending_to_publish", "doSomething", 999);

The custom fields are there for draft_to_publish but not for new_to_publish.

If I use save_post it seems to work every time, but I need it to only run when the status is set to publish for the first time...

2
  • That's because the fields weren't set then. For e.g. Autosave doesn't save them, etc. Use the values from $_POST instead for your "new_to_publish" action.
    – kaiser
    Commented Sep 18, 2012 at 7:53
  • Thanks @kaiser, didn't think to check $_POST. It worked great.
    – Andreyu
    Commented Sep 18, 2012 at 8:17

1 Answer 1

4

That's because the fields weren't set then. Note: The »Autosave« process/request also doesn't save them.

Use the values from $_POST instead for your "new_to_publish" action.

EDIT: Do NOT forget to escape and properly sanitize input data! Else you will open a security hole.

2
  • For all newbies who, like me, don't understand this answer - you should use $value = $_POST['meta_key'];
    – Pavlo28
    Commented Nov 17, 2019 at 18:03
  • 1
    @GrafOrlov See update. Please escape your input data properly.
    – kaiser
    Commented Nov 18, 2019 at 10:59

Not the answer you're looking for? Browse other questions tagged or ask your own question.