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
我想这种行为有事情做与安全,但我无法弄清楚如何解决这个问题。有任何想法吗?