如果 wp_insert_post_data 条件为真,Wordpress 会阻止 post 被保存

Wordpress prevent post to be saved if condition is true with wp_insert_post_data

我有一个使用自定义字段创建 post 的自定义插件(这些自定义字段将保存为元数据)。

问题是当这些自定义元值与另一个 post 完全相同时。 任务是抛出错误信息而不是保存 post。 到目前为止,我使用 wp_insert_post_data 来触发我的函数,该函数检查这个元值组合是否已经存在于 antoher post.

add_filter( 'wp_insert_post_data' , 'check_duplicate_relation' , '99', 2 );

我的问题是:如何阻止创建 post?我尝试 return array(), return false,但是 post 仍然是用最少的必需值创建的。我知道我的函数应该 return 更改数据,但我尝试以某种方式触发错误消息并且不会创建 post。

知道我该怎么做吗?...或者我应该使用什么钩子?据我搜索,这是应该使用的。

谢谢。

更新: 这是我的功能: 我应该去哪里做什么?

function check_duplicate_relation($data , $postData ) {

if($data['post_type'] == 'bpp_relation' && $data['post_status'] != 'auto-draft') {
    if(isset($postData['fields']) && !empty($postData['fields'])) {
        $bonusProgramId = intval(array_values($postData['fields'])[0]);
        $companyId = intval(array_values($postData['fields'])[1]);

        if($bonusProgramId && $bonusProgramId > 1 && $companyId && $companyId > 1) {
            $args = array(
                'posts_per_page' => 2, 
                'post_type' => 'bpp_relation',
                'meta_query' => array(
                     array(
                           'key' => 'company',
                           'value' => $companyId,
                           'compare' => '=',
                     ),
                     array(
                           'key' => 'bonus_program',
                           'value' => $bonusProgramId,
                           'compare' => '=',
                     )
                )
            );

            $relation = get_posts( $args );

            if(empty($relation)) {
                return $data;
            } else {
                // here the error should be returned
            }
        }

    }
}

return $data;

}

查看过滤器 wp_insert_post_empty_content。如果您 return 一个评估为 true 的值,则 post 将被阻止保存。 See in WordPress source.