我有一个自定义插件,它使用自定义字段来创建帖子(这些自定义字段将保存为元数据)。
问题是当这些自定义元值与另一个帖子完全相同时。 任务是抛出错误消息而不是保存帖子。 到目前为止,我使用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;
}
答案 0 :(得分:0)
请参阅过滤器wp_insert_post_empty_content
。如果返回的值为true,则将阻止保存帖子。 See in WordPress source