从昨天开始wp_scheduled_auto_draft_delete
cron作业以某种方式从菜单中删除所有页面条目。表中的所有条目wp_postmeta
具有meta_key = \'_menu_item_object\'
和meta_value = \'page\'
在此过程中删除。通过跟踪DELETE查询,我发现菜单条目是由一个名为_wp_delete_post_menu_item
. 我得到了该函数的以下堆栈跟踪:
#0 _wp_delete_post_menu_item(3244)
#1 call_user_func_array(_wp_delete_post_menu_item, Array ([0] => 3244))
called at [/srv/www/htdocs/biva/wp-includes/plugin.php:470]
#2 do_action(delete_post, 3244) called at
[/srv/www/htdocs/biva/wp-includes/post.php:2483]
#3 wp_delete_post(3244, 1) called at
[/srv/www/htdocs/biva/wp-includes/post.php:5645]
#4 wp_delete_auto_drafts()
#5 call_user_func_array(wp_delete_auto_drafts, Array ()) called at
[/srv/www/htdocs/biva/wp-includes/plugin.php:546]
#6 do_action_ref_array(wp_scheduled_auto_draft_delete, Array ()) called
at [/srv/www/htdocs/biva/wp-cron.php:100]
但我被困在这里,我不是wordpress开发人员,我不知道为什么删除旧草稿会导致删除附加菜单项,尽管主页仍然存在。
Workaround:作为一种解决方法,我们在wp-config
, wich将禁用wp-cron
:
/** Disable wp-cron to prevent menu from getting deleted. Detailed Bug description:
http://wordpress.stackexchange.com/questions/145953 **/
define(\'DISABLE_WP_CRON\', true);
如果遇到类似的困难,可以尝试锁定表中的行
wp_postmeta
具有
meta_key = \'_menu_item_object\'
和
meta_value = \'page\'
然后跟踪WP试图删除这些行时的错误消息,这就是我们确定错误的方法。
Reproduce the Error:肯定是隐藏发布插件导致了我们的错误,可以通过执行以下操作轻松复制它:
安装新的Wordpress 3.9.1安装隐形发布插件http://wordpress.org/plugins/stealth-publish.创建一些测试页面并将其添加到新菜单中创建一个包含一些虚拟内容的新页面,but do not save it!. 离开页面而不保存在未来8天内更改系统时间
wp_scheduled_auto_draft_delete
cron作业将运行,因为它每天都在运行,并且在您访问页面后7天内都没有运行。然后,它会发现您从未保存过的虚拟页面,将其删除,因为它已超过7天,菜单将消失您可能需要刷新页面几次,直到效果变为可见我已经录制了一段关于如何再现错误的屏幕广播(但我没有花时间对其进行评论):
http://www.youtube.com/watch?v=R9CTggjIfDY