Backstory:我们使用事件日历中的Events Aggregator附加插件通过cron作业导入事件。问题是,插件代码只检查UID--并且提要提供者是废话,并更改了" UNIQUE" ID每天一次。因此,我们正在疯狂地导入重复事件。
我想我可以通过不仅检查UID,还检查帖子标题,事件开始日期和事件结束日期来解决这个问题。它并不像我想象的那么容易,而且我将在下面记录原因。
答案 0 :(得分:0)
事件日历对外部开发人员没有很多好的操作/过滤器:它们主要供内部使用。他们很友好地建议我尝试save_post
。
唯一的问题是我无法弄清楚如何在save_post
钩子的中间访问事件开始或结束日期的post元:事件日历的功能和{{1工作。
所以,我迷上了get_post_meta
和updated_post_meta
,就像这样:
added_post_meta
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,那么该事件很可能已经存在,而且正在删除正在导入的事件。
(希望这可以节省其他人很多时间和挫折感。)