我正在使用wp all import wordpress插件从csv文件将帖子导入我的wordpress博客。该文件有超过10000个帖子,问题是随着数据库大小增加,插件发布变慢或者如果发布大约1000个帖子,发布的帖子数量减少到流程开始时的速率的1/4。
是否可以防止插件重复检查? 或者我可以将从wordpress数据库读取的数据限制为100个帖子而不是阅读1000个帖子吗?
看起来你的服务器正在努力,因为这个操作是资源密集型的。在你的数据库中发送所有这些SQL查询肯定会减慢服务器中的速度。你可以尝试一些东西,看看它是否有帮助。
do_action
实际上有一个过滤器可以做到这一点。这种方式应该在插件更新时坚持下去。您不必使用当前所选答案中描述的“Hack”。
apply_filters('wp_all_import_is_check_duplicates', true, $this->id);
因此,您可以编写这样的函数来防止检查重复记录。将它添加到functions.php文件或插件中。
//My Custom FILTER to Disable checking for duplicates
add_filter('wp_all_import_is_check_duplicates', 'disable_check_dupe_func', 10, 2);
//My Custom FUNCTION to Disable checking for duplicates
function disable_check_dupe_func($truefalse, $thisid){
$truefalse = false;
return $truefalse;
}//disable_check_dupe_func($truefalse, $thisid){
我正在使用专业版,所以如果这个过滤器不在免费版上,我会改变答案。
这是我的结果。我的文件中有100,000条记录。我没有必要检查重复项。在应用此过滤器之前,请确保您了解此含义。
在应用过滤器之前:18分36秒 - 25%~25,000条记录 - 我故意取消了它。
应用过滤器后:10分37秒 - 27%~27,000条记录
总运行时最终为:36分23秒 - 100%100,000记录。
所以对我来说它节省了很多时间。
随着时间的推移这种减速是一个已知的问题,并且在plugin website上记录了解释,下面再现了最相关的部分。
将文件拆分为块是一种有用的方法,可以减少WP All Import在导入过程结束时减慢的速度。
减速的原因部分是因为WP All Import必须在导入过程中稍后进一步读入该文件。在每次迭代时,“文件指针”被重置。
[...]在后期迭代期间,例如,当导入记录15000-16000时,WP All Import必须在文件中读取15000条记录才能开始导入数据。
将文件拆分为块可以防止这种速度降低 - 但需要付出代价 - 它必须在服务器上临时创建许多新文件。
[...]不可能完全消除减速,因为随着数据库变大,您的服务器和WP All Import必须做更多工作。
你提到的关于重复的例子。
do_action
如上所述,将导入文件拆分为块将有助于缓解速度下降。
链接页面还描述了插件设计为在不调用do_action
的情况下运行,并且建议禁用此插件,只要没有其他插件或进程需要使用它。
...我们在没有任何do_action调用的情况下创建了此函数的一个版本,选中此框将使WP All Import使用我们自定义的wp_insert_post函数,而不是WordPress提供的默认函数。
提到的复选框位于导入步骤4中“配置高级设置”标题下。
我无法找到设置值来执行此操作,因此不得不求助于编辑插件的源代码来完成此操作。
打开文件/wp-content/plugins/wp-all-import/models/import/record.php
并搜索“// if Auto Matching re-import option selected
”,它应该是第739行,然后输入/*
从它上面的行开始一个块注释。然后向下滚动到第807行(在“// Duplicate record is founded
”上方)并输入*/
以结束块注释。这将阻止导入过程检查重复的帖子,并且应该使用大量导入来加速它。这已被证实不会在最新版本的免费插件中引起任何错误(除非出现明显的重复),但我没有足够大的数据集来测试任何可靠的性能提升。
值得注意的是,这是一个“黑客”,所做的更改将在插件的任何更新时恢复,并且不应被视为稳定修复。