0
我有一個使用自定義字段創建帖子的自定義插件(這些自定義字段將被保存爲元數據)。如果wp_insert_post_data條件爲真,Wordpress阻止文章被保存
問題是,當這些自定義元值是完全相同的另一篇文章。 該任務是拋出一條錯誤消息並且不保存該帖子。 到目前爲止,我使用wp_insert_post_data來觸發我的函數,檢查這個元值組合是否已經存在於antoher post中。
add_filter('wp_insert_post_data' , 'check_duplicate_relation' , '99', 2);
我的問題是:我如何阻止帖子被創建?我試圖返回array(),返回false,但帖子仍然以最小的必需值創建。我知道我的函數應該返回更改的數據,但我所嘗試的是以某種方式觸發錯誤消息,並且不會創建帖子。
任何ideea我該如何做到這一點?或者我應該使用什麼鉤子?據我搜查這是應該使用的。
謝謝。
更新: 這裏是我的功能: 我應該在哪裏做什麼?
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;
}
我編輯了我的答案,在錯誤應該返回的行上我該怎麼稱呼? apply_filters('wp_insert_post_empty_content'...或add_filter?我想我都試過,但它不起作用。 –
你會想使用'add_filter('wp_insert_post_empty_content','your_function_name',10,2)'註冊你的過濾器函數,可能有不同於10的優先級。「2」參數很重要,因爲它只會將第一個參數傳遞給函數,否則第一個變量是如果返回爲true,則停止後期創建的變量。 – highvolt
我用這行代碼:add_filter('wp_insert_post_empty_content','check_duplicate_relation','10',2);.如果我的函數check_duplicate_relation返回true ...它應該觸發這個空的內容錯誤,對吧? –