您收到停止插入通知的原因wp_insert_post_empty_content
如您在https://wordpress.stackexchange.com/a/51980/31794 答案是:为了post-new.php
自动起草流程需要获得$post->ID
通过get_default_post_to_edit()
和wp_insert_post()
, 并使用$post返回中的ID。i、 e.“添加新帖子”页面实际上每次都会创建并获取新的“帖子记录”。
遗憾的是,如果停止保存过程而不是预期的帖子ID,wp\\u insert\\u post()将返回0。换句话说,您无法使用“wp\\u insert\\u post\\u empty\\u content”筛选器停止“自动草稿”。如果你使用这个过滤器,很遗憾,你必须让“自动草稿”通过,以避免PHP的注意。这是一个非常糟糕的bug。
我发现,唯一可以停止无意义地创建新的自动草稿记录并绕过此错误的方法是,使用db扩展wpdb类。php插件:
class wpdb_ext extends wpdb
{
function insert($table, $data, $format = null) {
if (isset($data[\'post_status\']) && $data[\'post_status\'] === "auto-draft" && ($pa = (int)$data[\'post_author\'])
&& ($id = $this->get_var("SELECT ID FROM $table WHERE post_status = \'auto-draft\' AND post_author = $pa LIMIT 1"))){
//fake insert id and return id of existing auto-draft as base for New post page.
return $this->insert_id = (int)$id;
}
return parent::insert($table, $data, $format = null);//else do actual insert
}
}
$wpdb = new wpdb_ext(DB_USER, DB_PASSWORD, DB_NAME, DB_HOST);//overload wpdb
这样,每个作者只保留一个自动草稿,避免了毫无意义的新自动草稿记录白白浪费/跳过id增量。