防止通过事件日历WordPress插件导入重复事件

时间:2017-04-18 21:07:02

标签: php wordpress

Backstory:我们使用事件日历中的Events Aggregator附加插件通过cron作业导入事件。问题是,插件代码只检查UID--并且提要提供者是废话,并更改了" UNIQUE" ID每天一次。因此,我们正在疯狂地导入重复事件。

我想我可以通过不仅检查UID,还检查帖子标题,事件开始日期和事件结束日期来解决这个问题。它并不像我想象的那么容易,而且我将在下面记录原因。

1 个答案:

答案 0 :(得分:0)

问题1:找到合适的挂钩

事件日历对外部开发人员没有很多好的操作/过滤器:它们主要供内部使用。他们很友好地建议我尝试save_post

唯一的问题是我无法弄清楚如何在save_post钩子的中间访问事件开始或结束日期的post元:事件日历的功能和{{1工作。

所以,我迷上了get_post_metaupdated_post_meta,就像这样:

added_post_meta

问题2:获得匹配的标题

Feed提供程序还在Feed标题中包含了一些短划线,如下所示:

“东西 - 是 - 间隔 - 很多”

我使用了function check_for_duplicate_event_when_meta_updated( $meta_id, $post_id, $meta_key, $meta_value ) { // Make sure we are handling just the meta field we are interested in. if ( $meta_key !== '_EventEndDate' ) { return false; } if ( wp_is_post_revision( $post_id ) ) { return false; } if ( get_post_type( $post_id ) != 'tribe_events' ) { return false; } if ( trim( $meta_value ) == '' ) { return false; } clear_out_potential_duplicate_events( $post_id ); } add_action( 'updated_post_meta', 'check_for_duplicate_event_when_meta_updated', 10, 4 ); add_action( 'added_post_meta', 'check_for_duplicate_event_when_meta_updated', 10, 4 ); ,因此我可以将传入帖子的帖子标题与数据库中已有的帖子进行比较。唯一的问题是,get_the_title()将这些短划线字符转换为HTML实体,如下所示:

“东西 - 是 - 间隔 - 很多”

没什么大不了的,只需将它们转换回get_the_title()的短划线字符,对吧?错误。当我将字符串转换回来时,这就是它给我的东西:

“东西 - 是 - 间隔 - 很多”

它将我的dang en破折号改为了破折号!现在我的SQL查询无法正常工作。

我找到了解决方案,是暂时关闭html_entity_decode过滤器。这是解决方案的后半部分:

wp_texturize

将所有东西捆绑在一起

最后一部分,SQL查询非常简单:它搜索数据库以查看是否存在类似正在导入的帖子的内容。如果查询在结果数组中返回一个ID,那么该事件很可能已经存在,而且正在删除正在导入的事件。

(希望这可以节省其他人很多时间和挫折感。)