You must pass the value 2 for the $accepted_args
argument in add_filter()
if you want to access $postarr
.
Some have problems to get the post ID inside wp_insert_post_data:
If you have access to $postarr, you can easily retrieve the post ID with
$my_post_id = $postarr['ID'];
The defaults for the parameter $data are:
'post_author',
'post_date',
'post_date_gmt',
'post_content',
'post_content_filtered',
'post_title',
'post_excerpt',
'post_status',
'post_type',
'comment_status',
'ping_status',
'post_password',
'post_name',
'to_ping',
'pinged',
'post_modified',
'post_modified_gmt',
'post_parent',
'menu_order',
'guid'
The defaults for the parameter $postarr are:
'post_status' - Default is 'draft'.
'post_type' - Default is 'post'.
'post_author' - Default is current user ID ($user_ID). The ID of the user who added the post.
'ping_status' - Default is the value in 'default_ping_status' option.
Whether the attachment can accept pings.
'post_parent' - Default is 0. Set this for the post it belongs to, if any.
'menu_order' - Default is 0. The order it is displayed.
'to_ping' - Whether to ping.
'pinged' - Default is empty string.
'post_password' - Default is empty string. The password to access the attachment.
'guid' - Global Unique ID for referencing the attachment.
'post_content_filtered' - Post content filtered.
'post_excerpt' - Post excerpt.
The post $postarr looks like:
'post_status',
'post_type',
'post_author',
'ping_status',
'post_parent',
'menu_order',
'to_ping',
'pinged',
'post_password',
'guid',
'post_content_filtered',
'post_excerpt',
'import_id',
'post_content',
'post_title',
'ID',
'post_date',
'post_date_gmt',
'comment_status',
'post_name',
'post_modified',
'post_modified_gmt',
'post_mime_type',
'comment_count',
'ancestors',
'post_category',
'tags_input',
'filter'
Contrary to the name, this hook also runs on post update and post delete.