wp insert post – wp_insert_post always returns 0 on one site, extensive testing done, can’t get to the bottom
I have two sites. One, a fresh install, the other an existing site with errors/white screen of death on the
wp-admin/post-new.php screen. I’ve disabled all of the active plugins, and enabled a default theme, and am still getting these errors (because the draft post is not created properly in the DB during the page load).
Notice: Trying to get property 'post_type' of non-object Warning: Creating default object from empty value Notice: Trying to get property 'post_status' of non-object Notice: Trying to get property 'ID' of non-object
I’ve tracked this down to an issue with
wp_insert_post() when loading the
wp-admin/post-new.php screen. For testing, I added a
wp_die( print_r( $wpdb ) ); in the
wp-includes/post.php core file (here). This outputs a lot of information about the database query. No errors are present, and it says
[rows_affected] => 1, [insert_id] => 0, and the return of
wp_insert_post() is always 0.
I can’t figure out why with a default core theme, no plugins active, no mu-plugins directory and no core files altered,
wp_insert_post() is always returning 0. The post is inserted into the database, but it always has a post ID of 0 and the post-new.php screen white screens. When I have WP_DEBUG enabled, the above errors are present. I have a feeling it has to do with the one database, but I don’t see any errors that would indicate so. Both DBs are InnoDB and pretty much identical except for the data held within them.
My very basic code to test
wp_insert_post() is as follows, and as stated works on one site and not the other.
$my_post = array( 'post_title' => 'test', 'post_content' => '', 'post_status' => 'publish', 'post_author' => 1, ); // Insert the post into the database $test = wp_insert_post( $my_post ); wp_die( 'New ID: ' . $test );
On the non-working site, the post is inserted into the database as post 0 and set to auto draft.
Var Dump from Broken $wpdb
Here is the
var_dump of the
$wpdb return inside of
wp_insert_post() in the core file linked above: https://pastebin.com/CGGv5q4N
As you can see there are no visible errors, and it looks like the post should have been assigned a post ID, because it’s in the DB, but it’s always post ID 0.