在SAVE_POST之后使用INSERT_POST_DATA和在POST_TERVATION DRAFT_TO_Schedule之后使用INSERT_POST的事件日历

时间:2011-01-03 作者:user2271

好吧,我正在为我的网站开发一个活动日历,这是一项可怕的任务,我有点卡住了。我对任何想法都持开放态度,但以下是我正在做的和我想做的。我假设我的主要问题是挂钩和过滤器的顺序,因为我觉得我已经很好地掌握了我想要做什么。此外,我坚持使用wordpress挂钩和过滤器,而不是直接操作mysql数据库。

缺点是。。。

保存第一个自定义字段,然后将当前post\\u日期更改为该自定义字段,并将post\\u状态更改为future,无论何时将帖子保存为草稿或提交以供审阅现在是长版本。

首先,我有一个名为“events”的自定义post\\u类型。为此注册了一些自定义字段,为了简单起见,我们将其称为\\u start\\u date\\u one、\\u end\\u date\\u one、\\u start\\u date\\u two、\\u end\\u date\\u two。

我想做的是允许创建“事件”帖子,并允许输入这些字段、标题和内容。到现在为止,一直都还不错。然后,当有人单击“保存草稿”或“提交以供审阅”时,我想将当前post\\u日期更改为\\u start\\u date\\u one,并将post\\u状态更改为“未来”。现在,我只能在至少第二次保存后才能做到这一点,因为我正在使用add\\u操作(“save\\u post”)保存自定义字段,然后使用add\\u filter(“wp\\u insert\\u post\\u data”)更新当前的post数据。我通过一些trac搜索意识到,insert\\u post\\u数据发生在保存之前,允许我使用新信息更新$数据和$postarr,然后保存自定义字段这就是为什么会发生上述情况。

上面列出的第二条我尝试了很多方法让wp\\U insert\\U post工作,但只插入了一篇日期不正确的待处理帖子,其他内容都被复制了。

非常感谢您的帮助。

1 个回复
SO网友:MikeSchinkel

你好@user2271:

我最近不得不解决一个事件自定义帖子类型的问题,我无法让WordPress让我保存未来的日期。我不想像你的那么复杂,但下面的代码解决了我的问题,也许你可以用它来解决你的问题:

add_action(\'admin_init\', \'yoursite_admin_init\');
static function yoursite_admin_init() {
  global $pagenow;
  if ($pagenow==\'post.php\' && isset($_POST[\'post_date\'])) { 
    $_POST[\'event_date\'] = date(\'Y-m-d H:i:s\',strtotime($_POST[\'post_date\']));
  }
}
add_filter(\'wp_insert_post_data\', \'yoursite_wp_insert_post_data\',10,2);
static function yoursite_wp_insert_post_data($data,$postarr) {
  global $pagenow;
  if ($data[\'post_type\']==\'event\') {
    // Saving an event, \'event_date\' grabbed in admin_init
    if ($pagenow==\'post.php\' && isset($postarr[\'event_date\'])) {
      $data[\'post_date\'] = $data[\'post_date_gmt\'] = $postarr[\'event_date\'];
    }
  }
  return $data;
}
WordPress基本上是将博客帖子逻辑应用于所有帖子,事件应该遵循不同的逻辑。我发布的代码在\'admin_init\' 钩子,然后在\'wp_insert_post_data\' WordPress“修复”每个博客帖子的日期逻辑后的挂钩。

我认为,了解这个问题将有助于您确定如何根据更复杂的工作流进行修复?

希望这是heps。

结束

相关推荐

获取在Functions.php中设置的变量,并在我的Custom Post模板中回显它们

在我的函数中设置了以下函数。php文件,以允许我的自定义帖子类型“Slideshow”工作。add_action( \'the_post\', \'paginate_slide\' ); function paginate_slide( $post ) { global $pages, $multipage, $numpages; if( is_single() && get_post_type() == \'lom_s