如果条件为wp_insert_post_data,则Wordpress会阻止保存帖子

时间:2016-09-30 18:29:13

标签: php wordpress post hook

我有一个自定义插件,它使用自定义字段来创建帖子(这些自定义字段将保存为元数据)。

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

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

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

任何想法我怎么能这样做?......或者我应该使用什么样的钩子?据我所知,这是应该使用的那个。

感谢。

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

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;

}

1 个答案:

答案 0 :(得分:0)

请参阅过滤器wp_insert_post_empty_content。如果返回的值为true,则将阻止保存帖子。 See in WordPress source