WP_INSERT_POST在一个站点上总是返回0,已完成广泛测试,无法找到底部

时间:2021-09-13 作者:Gary

我有两个网站。一个是新安装,另一个是存在错误的现有站点/在wp-admin/post-new.php 屏幕我已经禁用了所有活动插件,并启用了默认主题,但仍然出现这些错误(因为在页面加载期间,未在DB中正确创建草稿帖子)。

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
我找到了一个问题wp_insert_post() 加载时wp-admin/post-new.php 屏幕为了测试,我添加了wp_die( print_r( $wpdb ) );wp-includes/post.php 核心文件(here). 这将输出有关数据库查询的大量信息。不存在错误,并且它说[rows_affected] => 1, [insert_id] => 0, 以及wp_insert_post() 始终为0。

我不明白为什么在默认的核心主题下,没有插件处于活动状态,没有mu插件目录,没有更改的核心文件,wp_insert_post() 始终返回0。帖子插入到数据库中,但它的帖子ID始终为0,帖子是新的。php屏幕白色屏幕。启用WP\\U调试后,会出现上述错误。我有一种感觉,这和一个数据库有关,但我看不到任何错误会表明这一点。这两个数据库都是InnoDB,除了其中保存的数据外,几乎完全相同。

我最基本的测试代码wp_insert_post() 如下所示,如所述,在一个场地上工作,而不是在另一个场地。

$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 );
在非工作站点上,帖子作为帖子0插入到数据库中,并设置为自动草稿。

来自损坏的$wpdb的Var转储var_dump$wpdb 返回内部wp_insert_post() 在上面链接的核心文件中:https://pastebin.com/CGGv5q4N

正如您所看到的,没有可见的错误,而且似乎应该为帖子分配一个帖子ID,因为它在DB中,但它始终是帖子ID 0。

Var转储自工作$wpdb

https://pastebin.com/QTUVfdHR

1 个回复
SO网友:Sally CJ

我觉得这和一个数据库有关,但我并没有看到任何错误表明这一点。

是的,很明显WordPress posts表的结构(wp_040skcp8g2_posts) 在有问题的站点中已损坏。

更具体地说,缺少诸如主键之类的索引,因此需要尽快将它们添加回来:

参见第26行https://pastebin.com/CGGv5q4N 这是[Key] => 而应该是[Key] => PRI 第28行应该是[Extra] => auto_increment.

试着跑步SHOW INDEXES FROM wp_040skcp8g2_posts 通过phpMyAdmin,您会注意到缺少表索引。

我不知道索引是怎么消失的,但我会扫描网站,寻找可能的安全漏洞,然后确保WordPress核心、插件和主题是最新的。我还可能更改WordPress/cPanel/FTP/SSH等密码。

正如您所看到的,没有可见的错误,而且似乎应该为post分配一个post ID,因为它在DB中,但它总是post ID为0。

post ID字段应该是主键,其值为auto-incremented对于每个插入操作,但正如我前面所说,主键丢失,ID字段也不再自动递增,因此,post ID始终为0,即零。

因此,您确实需要修复表结构,并确保其他(WordPress)表也具有良好的结构。

例如,要添加主键,可以执行以下操作ALTER TABLE wp_040skcp8g2_posts MODIFY ID bigint(20) unsigned NOT NULL auto_increment, ADD PRIMARY KEY (ID).

但是,如果您需要进一步的帮助(添加或修复索引),请尝试继续询问https://dba.stackexchange.com/, 或堆栈溢出?:)

相关推荐

谁更新wp-admin/core文件?

我可以看到这是一个CDN文件,我无法访问它。我的安全插件提醒我,wp管理/核心文件已被修改,但我没有更改任何内容。我还没有更新到5.0。那么是谁改变的呢?如果这是重复的,我很抱歉。我只能找到关于核心更新的“如何”帖子,没有任何具体说明谁实际更新了它。我只是不确定这是安全问题还是Wordpress的正常过程。Edit: 这是有问题的文件