我使用插件创建自定义帖子类型“优惠”。在这个插件中是类'offer'。 在构造方法中,我添加了一个过滤器:
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
我猜这种行为与安全性有关,但我无法弄清楚如何解决这个问题。有什么想法吗?
答案 0 :(得分:2)
过滤器应返回一个值。我怀疑你需要添加
return $data;
在你的日常工作结束时。