2013-09-30 33 views
0

我使用插件来创建自定义帖子类型'Offer'。在这个插件是类'提供'。 在construct方法我添加过滤器:wp_insert_post_data挂钩上的修改日期格式更改权利

add_filter('wp_insert_post_data', array($this,'save_offer_meta'),'99',2); 

调用该方法:

public function save_offer_meta($data, $postarr) 
    { 
     if ($this->slug == $data['post_type']) { 
     if (isset($postarr['_cpt_start_date'])) { 
      $date = DateTime::createFromFormat('j-m-Y', $postarr['_cpt_start_date']); 
      $right_date = $date->format('Y-m-d'); 
      update_post_meta($postarr['ID'], '_cpt_start_date', $right_date); 
     } 
     if (isset($postarr['_cpt_end_date'])) { 
      $date = DateTime::createFromFormat('j-m-Y', $postarr['_cpt_end_date']); 
      $right_date = $date->format('Y-m-d'); 
      update_post_meta($postarr['ID'], '_cpt_end_date', $right_date); 
     } 
    } 
} 

我用它来格式化本地日期输入到MySQL格式。我知道这并不是必须的,因为wp_postmeta的meta_value列的数据类型为LONGTEXT,但我仍然希望将此日期保存为MySQL格式。

这种方法确实有效,但奇怪的是,当我想创建任何帖子(默认帖子,此自定义帖子类型或任何其他自定义帖子类型)时,我只能提交以供查看,并更新现有帖子,尽管我以管理员身份登录。当我在构造函数中删除add_filter行时,权限会恢复原样(我可以创建,更新任何帖子),但是当然,日期是以本地格式存储的。

的error_log中说:

PHP Warning: array_keys() expects parameter 1 to be array, null given in ***/wp-includes/wp-db.php on line 1310 
PHP Warning: Invalid argument supplied for foreach() in ***/wp-includes/wp-db.php on line 1312 
PHP Warning: implode() [<a href='function.implode'>function.implode</a>]: Invalid arguments passed in ***/wp-includes/wp-db.php on line 1321 

我想这种行为有事情做与安全,但我无法弄清楚如何解决这个问题。有任何想法吗?

回答

2

过滤器应该返回一个值。我怀疑你需要添加

return $data; 

在你的例程结束。