在wp-all-import wordpress插件中禁用重复的帖子检查

时间:2015-03-29 08:46:00

标签: php wordpress

我正在使用wp all import wordpress插件从csv文件将帖子导入我的wordpress博客。该文件有超过10000个帖子,问题是随着数据库大小的增加,插件发布变慢或者如果发布大约1000个帖子,发布的帖子数量减少到流程开始时的1/4。

是否可以防止插件重复检查?

或者我可以将从wordpress数据库读取的数据限制为100个帖子而不是读取1000个帖子吗?

3 个答案:

答案 0 :(得分:7)

似乎您的服务器正在努力,因为此操作是资源密集型的。在您的数据库中发送所有这些SQL查询肯定会减慢服务器中的速度。 你可以尝试一些事情,看看它是否有帮助。

  • 尝试将脚本拆分为块并在当时解析少量帖子(例如1000)。
  • 禁用do_action
  • 尝试增加php脚本的执行时间(这不太可能有所帮助,但如果没有任何帮助可以尝试)。
  • 使用DBMS(Mysql Workbench,PgAdmin等...)将sql文件备份直接导入数据库,并导入将db映射到帖子的xml文件。 更多信息:

关于WP all import here

关于Wordpress backups here

答案 1 :(得分:2)

实际上有一个过滤器可以执行此操作。这种方式应该在插件更新时坚持下去。您不必使用当前所选答案中描述的“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条记录 - 我故意取消了它。

enter image description here

后应用过滤器: 10分37秒 - 27%~27,000 记录

10 minutes 37 seconds - 27% ~27,000 records

总运行时间最终成为: 36分23秒 - 100%100,000 记录。 enter image description here

所以对我而言,它节省了很多时间。

答案 2 :(得分:1)

问题

随着时间的推移这种放慢是一个已知的问题,plugin website会记录一个解释,下面再现了最相关的部分。

  

将文件拆分成块是减少WP量的有用方法   导入过程结束时,所有导入速度都会降低。

     

减速的原因部分是因为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”上方)并输入*/以结束块注释。这将阻止导入过程检查重复的帖子,并且应该使用大量导入来加速它。这已经过验证,不会在最新版本的免费插件上造成任何错误(除非出现明显的重复),但我没有足够大的数据集来测试任何可靠的性能提升。

值得注意的是,这是一个“黑客”,所做的更改将在插件的任何更新中恢复,并且不应被视为稳定修复。