菜单项(所有菜单)被随机删除

时间:2014-05-28 作者:zigojacko

这真的把我逼疯了。

随机地,所有菜单的所有“我的菜单项”都会被自己删除。不是菜单本身,而是菜单中的所有项目。

这是我们在Bones样板上构建的自定义主题。虽然我们已经在Bones上建立了很多网站,但我们没有遇到任何其他网站的问题。

我知道通常的建议是:-

停用所有插件,查看问题是否仍然存在

每次发生这种情况,我们都必须手动重建我们的所有菜单,如果谷歌在这些菜单项都被删除的情况下爬行我们的网站,这将成为一个真正的痛苦,并可能带来灾难性的后果。

这仅在3.8更新后开始发生,但在再次恢复所有菜单项后的四天内发生。

错误日志中没有任何值得注意的内容。最后一次发生在过去48小时内,我们在此期间的错误日志中只包含以下内容(实际域替换为domain.com):-

[Sun May 25 02:32:23 2014] [warn] RSA server certificate CommonName (CN) `plesk\' does NOT match server name!?
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/vhosts/domain.com/cgi-bin/php
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/vhosts/domain.com/cgi-bin/php5
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/vhosts/domain.com/cgi-bin/php-cgi
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/vhosts/domain.com/cgi-bin/php.cgi
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/vhosts/domain.com/cgi-bin/php4
[Tue May 27 04:10:55 2014] [error] [client 188.143.234.90] script not found or unable to stat: /var/www/cgi-bin/cgi_wrapper/php
如果任何人都能提出以上要点,然后,我真正能想到的就是在开发环境中复制网站,并为网络爬虫索引网站(我已经在各个社区问过了)-似乎还有其他一些人也经历过同样的问题,但几乎不知道如何解决,尽管对一些人来说,这似乎与插件有关(尽管我没有在我们的网站上安装这些插件)。

令人沮丧!有谁能更好地解释一下如何深入(调试)这个问题吗?

我刚刚发现this same question 在这里也是。。。

数据库也已修复,但没有任何效果。

2 个回复
最合适的回答,由SO网友:zigojacko 整理而成

我将回答我自己的问题,主要是保留调试日志,直到我弄清问题的真相为止(希望能为其他SE用户的利益回答我的问题):-

2014年5月28日,根据上述内容提出问题。菜单项一直被随机删除的持续问题。出于测试目的,在子域上复制了网站。

2014年6月6日,现场删除了菜单项。开发人员网站上仍然完整,但注意到有4个插件更新,如下所示:-

CM工具提示词汇表(活动)

  • 表单生成器(非活动)
  • 共享此(非活动)
  • Wordpress SEO(活动)
    • 更新了所有四个插件,在10秒内,删除了开发网站上的所有菜单项。手动恢复的菜单项。

      手动停用并重新激活插件CM工具提示词汇表和Wordpress SEO(尝试复制更新过程的一部分)。几分钟后,所有菜单项仍然完好无损,尚未删除。

      我想也许将来会一次更新一个插件,这样就可以准确地找出问题的根源。

      2014年6月8日

      好的,现场的菜单项又消失了。没有在Wordpress中执行任何更新。它们在开发网站上仍然完好无损。自6月6日以来,服务器上没有为live site修改任何文件。

      再次手动恢复活动站点上的菜单项。

      live站点上提供了两个插件更新:-

      表单生成器(非活动)共享此(非活动)更新了两个插件,菜单项仍保持不变。。。

      开发人员网站上提供了一个插件更新:-

      表单生成器(非活动)已更新插件,菜单项仍保持不变。。。

      在插件更新和恢复live站点上的菜单项之前和之后,对数据库转储运行差异检查(如建议的in the comments):-

      有趣的是插入了下面的一行,它被拍打在wp_posts 表格:-

      (1170, 2, \'2014-06-08 11:02:05\', \'2014-06-08 10:02:05\', \' \', \'\', \'\', \'publish\', \'open\', \'open\', \'\', \'1170\', \'\', \'\', \'2014-06-08 11:02:05\', \'2014-06-08 10:02:05\', \'\', 0, \'http://www.domain.com/?p=1170\', 4, \'nav_menu_item\', \'\', 0),
      
      该行插入688和689之间,因此在表中类似:-

      688
      1170
      689
      
      看起来很奇怪,它会在那里随机插入这个。。。

      我还注意到wp_usermeta 表格:-

      (542, 2, \'nav_menu_recently_edited\', \'44\'),
      
      我的用户ID是2,这似乎表明我的用户ID最近编辑了44个导航菜单项。。。哪一种可能是将它们全部删除?

      刚刚安装了插件Stream 在live和dev站点上跟踪Wordpress管理中所做的任何更改。

      还升级了Apache服务器上的每个模块,包括mysql,并修复了mysql数据库。我升级了服务器上遇到的所有内容。我接着补充道max_input_varsphp.ini (2000年)。

      2014年6月12日,live site再次删除所有菜单项。未处理任何更新。菜单项已被删除,甚至没有人触摸网站上的任何内容。开发人员站点上的菜单项仍然完好无损。

      由于live site和dev site上的菜单项没有同时删除(站点和数据库完全相同,只是加载了更多的评论和类似的内容),我不确定这是什么意思。

      正在尝试Wordpress的内置数据库和修复工具,方法是将以下内容添加到wp_config.php:-

      define(\'WP_ALLOW_REPAIR\', TRUE);
      
      似乎没有发现任何错误,结果如下:-

      wp\\u users表正常。

      Failed to optimize the wp_users table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\u usermeta表正常。

      Failed to optimize the wp_usermeta table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U posts表正常。wp\\U posts表已优化。

      wp\\U注释表正常。

      Failed to optimize the wp_comments table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\u links表正常。

      Failed to optimize the wp_links table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U选项表正常。

      Failed to optimize the wp_options table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U Posteta表正常。

      Failed to optimize the wp_postmeta table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U术语表正常。

      Failed to optimize the wp_terms table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U term\\u分类表正常。

      Failed to optimize the wp_term_taxonomy table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\u term\\u relationships表正常。

      Failed to optimize the wp_term_relationships table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\U commentmeta表正常。

      Failed to optimize the wp_commentmeta table. Error: Table does not support optimize, doing recreate + analyze instead
      
      wp\\u snippets表正常。

      Failed to optimize the wp_snippets table. Error: Table does not support optimize, doing recreate + analyze instead
      
      维修完成。请从wp config中删除以下行。php以防止未经授权的用户使用此页面。

      定义(\'WP\\u ALLOW\\u REPAIR\',true);

      还从@birgire\'s的第1点安装了日志记录answer.

      2014年7月14日,我只想确认,自删除隐形发布插件以来,菜单项不再被删除。多亏了Rarst在另一个线程中的贡献,这个线程被标记为的副本。

      插件开发人员已经在Wordpress上意识到了这个问题,但很明显他们并不在意,插件已经被放弃/不再维护。

    SO网友:birgire

    这里有两个伐木工人可以帮助您解决这个问题。

    1) 如果您想知道nav菜单项的数量何时更改,可以使用以下记录器:

    /**
     * A logger for nav menu items count - writes to the nav.log file.
     *
     * @link http://wordpress.stackexchange.com/a/149394/26350
     */
    
    add_filter( \'wp_get_nav_menu_items\', 
        function( $items, $menu, $args ) 
        {
            $file = \'/path/to/nav.log\'; // Edit this filepath to your needs.
            if( file_exists( $file ) && is_writeable( $file ) )
            {
                $s = sprintf( " %s - menu: %s - count: %d %s" , date( "c" ),
                    $menu->slug,
                    $menu->count,
                    PHP_EOL
                );
                file_put_contents( $file, $s, FILE_APPEND | LOCK_EX );
            }
            return $items;
        }
    , PHP_INT_MAX, 3 );
    
    我向有类似问题的用户推荐了另一个站点上的此记录器。

    下面是一个输出示例:

     2014-06-12T13:14:47+00:00 - menu: primary - count: 11
     2014-06-12T13:14:47+00:00 - menu: primary - count: 11
    
    2) 您可以尝试记录INSERT, UPDATEDELETE 由执行的查询$wpdb 对象

    /**
     * Log the INSERT, UPDATE, DELETE database queries to the sql.log file.
     *
     * @link http://wordpress.stackexchange.com/a/149394/26350
     */
    
    add_filter( \'query\', 
        function( $query )
        {
            if( FALSE !== stripos( $query, \'UPDATE \' )
                || FALSE !== stripos( $query, \'INSERT \' )
                || FALSE !== stripos( $query, \'DELETE \' )
             ) {
                    $file =  \'/path/to/sql.log\'; // Edit this filepath to your needs.  
                    if( file_exists( $file ) && is_writeable( $file ) ) 
                        file_put_contents( 
                            $file, 
                            date( \'c\' ) . \' - \' . $query . PHP_EOL, 
                            FILE_APPEND | LOCK_EX 
                        );            
            }
            return $query;
        }
    , PHP_INT_MAX );
    
    所以你可以尝试使用nav.log 从中检查SQL查询sql.log 导航菜单项更改前后。

    只需记住修改日志文件路径,并确保日志文件可写即可。

    这些伐木工人可以进一步扩展。例如,我们可以另外记录:

    当前url、当前用户等。我希望这能有所帮助。

    结束

    相关推荐

    How to add taxonomy in menus?

    书籍(自定义帖子类型)小说(税)科学(税)历史(税)--书籍体裁(税务)小说(术语)科学(学期)历史(学期)以下哪一项是做这件事的“好方法”?对于前一个(这是我目前在管理菜单中的功能,我为每个功能都提供了“register\\u taxonomy”功能),我无法选择要在菜单中显示的“Tax”。而对于后者,我可以将它们添加到菜单中,只需要一个“register\\u taxonomy”函数。