WordPress Version: 6.2
/**
* Creates a new post from the "Write Post" form using `$_POST` information.
*
* @since 2.1.0
*
* @global WP_User $current_user
*
* @return int|WP_Error Post ID on success, WP_Error on failure.
*/
function wp_write_post()
{
if (isset($_POST['post_type'])) {
$ptype = get_post_type_object($_POST['post_type']);
} else {
$ptype = get_post_type_object('post');
}
if (!current_user_can($ptype->cap->edit_posts)) {
if ('page' === $ptype->name) {
return new WP_Error('edit_pages', __('Sorry, you are not allowed to create pages on this site.'));
} else {
return new WP_Error('edit_posts', __('Sorry, you are not allowed to create posts or drafts on this site.'));
}
}
$_POST['post_mime_type'] = '';
// Clear out any data in internal vars.
unset($_POST['filter']);
// Edit, don't write, if we have a post ID.
if (isset($_POST['post_ID'])) {
return edit_post();
}
if (isset($_POST['visibility'])) {
switch ($_POST['visibility']) {
case 'public':
$_POST['post_password'] = '';
break;
case 'password':
unset($_POST['sticky']);
break;
case 'private':
$_POST['post_status'] = 'private';
$_POST['post_password'] = '';
unset($_POST['sticky']);
break;
}
}
$translated = _wp_translate_postdata(false);
if (is_wp_error($translated)) {
return $translated;
}
$translated = _wp_get_allowed_postdata($translated);
// Create the post.
$post_id = wp_insert_post($translated);
if (is_wp_error($post_id)) {
return $post_id;
}
if (empty($post_id)) {
return 0;
}
add_meta($post_id);
add_post_meta($post_id, '_edit_last', $GLOBALS['current_user']->ID);
// Now that we have an ID we can fix any attachment anchor hrefs.
_fix_attachment_links($post_id);
wp_set_post_lock($post_id);
return $post_id;
}