apply_filters( ‘wp_insert_post_data’, array $data, array $postarr, array $unsanitized_postarr, bool $update )

Filters slashed post data just before it is inserted into the database.

Parameters

$dataarray
An array of slashed, sanitized, and processed post data.
$postarrarray
An array of sanitized (and slashed) but otherwise unmodified post data.
$unsanitized_postarrarray
An array of slashed yet *unsanitized* and unprocessed post data as originally passed to wp_insert_post() .
$updatebool
Whether this is an existing post being updated.

More Information

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'

Source

$data = apply_filters( 'wp_insert_post_data', $data, $postarr, $unsanitized_postarr, $update );

Changelog

VersionDescription
6.0.0The $update parameter was added.
5.4.1The $unsanitized_postarr parameter was added.
2.7.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.