我使用插件创建自定义帖子类型“优惠”。在这个插件中是“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
我想这种行为与安全有关,但我不知道如何解决这个问题。有任何想法吗?