A filter hook called by the wp_insert_post function prior to inserting into or updating the database.
<?php function filter_handler( $data , $postarr ){ ...... }
add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 ); ?>
<?php
function filter_handler( $data , $postarr ) {
// do something with the post data
return $data;
}
add_filter( 'wp_insert_post_data', 'filter_handler', '99', 2 );
?>
You must pass 2 for the $accepted_args variable 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
<?php
$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'
(wp_insert_post) Since: 1.0.0
wp_insert_post is located in wp-includes/post.php
.
comment_save_pre, pre_comment_approved, pre_comment_content, preprocess_comment, wp_insert_post(), wp_update_post()