同步管理更新导致自定义字段不更新

时间:2013-08-21 作者:Programmer Dan

好吧,我还有一个问题,虽然我仍在努力弄清楚到底发生了什么事,我可能需要什么样的帮助,但我想我应该在这里抛出一些东西,看看是否有人以前见过这样的问题。

我的网站目前在Linux服务器上运行Wordpress 3.6,并由Rackspace托管。在最基本的层面上,我的问题是在保存/更新帖子时更新帖子的自定义字段。

我已经为给定的帖子类型(本例中为产品)配置了一些显示的自定义元框。这些自定义元框在其自己的前端贴子页面和我的网站上的其他前端页面上包含这些产品的输入和规格。我在帖子的保存操作(更新按钮)上附加了一个保存功能,以便这些元框中包含的信息都保存到许多自定义字段中。我通过以下方法完成了这一点。

插入元框:

function create_custom_products_taxonomies(){
    register_post_type( \'products\',
        array(
            ...other inputs...
            \'register_meta_box_cb\' => \'products_meta_box\',
            ...other inputs...
        )
    );
}
add_action(\'init\', \'create_custom_products_taxonomies\');

function products_meta_box() {
    add_meta_box(\'custom_product_info\', __(\'Top 10 Product Listings\'), \'add_custom_page_product_info\', \'products\', \'normal\', \'high\');
}
功能定义:

function add_custom_page_product_info() {
    ...code to populate meta box...
}
保存定义:

function save_acpi_data() {
    ...code to save information in meta box...
}
add_action(\'save_post\', \'save_acpi_data\');
我添加这些主要是为了展示我是如何做事的。

我设置代码的方式是,save函数检查自定义元框中的数据,然后将信息保存到适当命名的自定义字段中。我还设置了保存功能,以便在保存/更新后进行清理,并删除所有存在的自定义字段,这些字段在保存/更新后没有关联的元框信息。

只有当有多个人登录到我的网站的管理端并正在更新/保存这些页面时,我的问题才会出现。(我们在网站上有大约700种产品,需要多人来适当更新网站。)出现这种情况时,我的自定义元框(自定义字段?)中的数据不知何故被删除了,因此从我的网站上消失了。

目前,我的工作原理是,通过管理端页面加载和/或后期保存的Wordpress传递的数据会以某种方式被截断。我是基于这样一个事实,当我们有大约6-7个人登录到站点的管理端并处理它时,我们当前站点上托管的四核服务器会在短暂但重复的一段时间内将CPU保持在100%。此外,我注意到,在我的apache错误日志中,以及在多人更新站点和数据消失时,会出现如下错误:

Script timed out before returning headers: async-upload.php, referer: wp-admin/post.php?post=75064&action=edit&message=1
Script timed out before returning headers: async-upload.php, referer: wp-admin/post.php?post=75262&action=edit&message=10
Script timed out before returning headers: async-upload.php, referer: wp-admin/post.php?post=75269&action=edit&message=6
重复多次。

数据丢失的问题在上周之前还不明显,但在上周之前,在给定的时间只有2-3人在该网站上工作。当我是唯一登录到管理端的人时,我也无法在第二台开发服务器(相同的服务器设置、Wordpress版本和主题代码)上复制这个问题到甚至是最轻微的程度。在发现几乎每个产品页面上都存在一些持久性错误,并希望在合理的时间内修复所有错误之后,我们对网站进行了最新的更改。

我只想忽略这个问题,并说一旦这些问题得到解决,它就会结束并消失,但我知道它会在以后再次出现,此外,它现在对当前站点造成的问题非常有影响。我们有一个站点的备份,负责保持备份的团队只需将丢失的数据从备份中复制到当前站点即可。一遍又一遍。。。你明白了。

现在,我正试图通过检查自定义元框中的信息量是否与save函数保存(并清理)所有相关自定义字段时的信息量一致来缓解这个问题。(保存后检查数据)

我还没有找到一种方法来检查数据是否在管理端页面加载时被截断,然后在保存帖子时被删除。在这种情况下,页面上的自定义字段在页面加载后将显示为空,即使数据仍然存在于数据库中并且“应该”显示。(检查post管理页面加载上的数据)

通过将WP\\u DEBUG设置为true,在调试栏插件处于活动状态的情况下运行站点的前端和后端,以及通过清除apache错误日志(除上述错误外),我已经清除了整个站点中的php错误。

我认为这足以描述我所看到的问题。我想我对社区的问题是:

还有谁见过这种行为吗?(由于缺少“保存”功能的“清理”部分,此问题将以元框中的信息呈现,而在保存帖子时,元框中的信息不会保存/更新到相应的自定义字段。)

还有什么我应该看的吗?

我唯一的另一个选择是关闭保存功能的“清理”部分,让其他人手动删除与他们要删除的信息相关的所有自定义字段,这对他们来说很乏味,但可以防止网站删除我们不想删除的随机信息。如果我不能很快找到这个问题的解决方案,我可能不得不求助于这个不受欢迎的选择。

不过我宁愿解决这个问题。我想这就是我作为一名工程师所得到的

1 个回复
最合适的回答,由SO网友:Programmer Dan 整理而成

所以,我想我相当肯定,我已经缩小了这个问题的范围,足以发布一个解决方案。

我们在另一个网站上突然发现了这个问题。然而,这个新网站托管在一个服务器上,该服务器上托管了大量其他网站(都是我们的)。上述因果情况的重要部分必须是服务器CPU正在封顶,从而导致Wordpress中的某个地方出现问题,可能与登录Wordpress的管理端无关。由于某种原因,我仍然不知道如何调用post save函数,但没有从Wordpress后端页面提交任何信息。

我似乎已经解决了我的问题,在每个自定义元框中包含一个值为“present”的隐藏输入,然后在执行与这些自定义元框关联的任何自定义保存/清理功能之前检查该输入的存在和值。这个新站点的行为似乎证实了这一假设,因为我之前已经将这个“修复”应用于这个新站点上的所有自定义元框,只有一个除外,而这一次,单个自定义元框(没有“修复”)是唯一显示任何数据丢失的。

我真的不知道如何充分描述这个问题,我可以自信地将它作为一个bug提交给Wordpress。我甚至不知道这是否会被认为是一个bug。尽管如此,在Wordpress代码中包含某种错误检查可能是一个好主意,当给定的服务器请求出现问题时,该代码将被激活。这个错误检查功能似乎在这个版本的Wordpress(3.6)中不存在,或者至少在我的情况下,这样的错误检查似乎没有正常工作。

希望这能在类似的情况下帮助其他人,即使Wordpress核心代码没有因此发生变化。

结束

相关推荐

Pre_Get_Posts筛选器中有多个元值?

我有一个带有自定义字段的自定义帖子类型,特别是“zip”。我还有一个数组,可以存储20个不同的邮政编码。我想检查一下这些自定义邮件类型中是否有邮政编码。如果他们这样做了,那么我希望他们出现在搜索结果中。如果他们没有,我不想让他们出现。我该怎么做。。?这快把我逼疯了。提前谢谢。