我有两个网站。一个是新安装,另一个是存在错误的现有站点/在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
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/, 或堆栈溢出?:)