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.

Var Dump from Working $wpdb

https://pastebin.com/QTUVfdHR

$299 Affordable Web Design WordPress

This article was republished from its original source.
Call Us: 1(800)730-2416

Pixeldust is a 20-year-old web development agency specializing in Drupal and WordPress and working with clients all over the country. With our best in class capabilities, we work with small businesses and fortune 500 companies alike. Give us a call at 1(800)730-2416 and let’s talk about your project.

FREE Drupal SEO Audit

Test your site below to see which issues need to be fixed. We will fix them and optimize your Drupal site 100% for Google and Bing. (Allow 30-60 seconds to gather data.)

Powered by

wp_insert_post always returns 0 on one site, extensive testing done, can’t get to the bottom

On-Site Drupal SEO Master Setup

We make sure your site is 100% optimized (and stays that way) for the best SEO results.

With Pixeldust On-site (or On-page) SEO we make changes to your site’s structure and performance to make it easier for search engines to see and understand your site’s content. Search engines use algorithms to rank sites by degrees of relevance. Our on-site optimization ensures your site is configured to provide information in a way that meets Google and Bing standards for optimal indexing.

This service includes:

  • Pathauto install and configuration for SEO-friendly URLs.
  • Meta Tags install and configuration with dynamic tokens for meta titles and descriptions for all content types.
  • Install and fix all issues on the SEO checklist module.
  • Install and configure XML sitemap module and submit sitemaps.
  • Install and configure Google Analytics Module.
  • Install and configure Yoast.
  • Install and configure the Advanced Aggregation module to improve performance by minifying and merging CSS and JS.
  • Install and configure Schema.org Metatag.
  • Configure robots.txt.
  • Google Search Console setup snd configuration.
  • Find & Fix H1 tags.
  • Find and fix duplicate/missing meta descriptions.
  • Find and fix duplicate title tags.
  • Improve title, meta tags, and site descriptions.
  • Optimize images for better search engine optimization. Automate where possible.
  • Find and fix the missing alt and title tag for all images. Automate where possible.
  • The project takes 1 week to complete.