0

我使用插件创建自定义帖子类型“优惠”。在这个插件中是“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

我想这种行为与安全有关,但我不知道如何解决这个问题。有任何想法吗?

4

1 回答 1

2

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

return $data;

在你的日常生活结束时。

于 2013-09-30T14:15:03.340 回答