2016-09-30 55 views
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; 

}

回答

0

參見濾波器wp_insert_post_empty_content。如果您返回的值爲true,則該帖子將被阻止保存。 See in WordPress source

+0

我編輯了我的答案,在錯誤應該返回的行上我該怎麼稱呼? apply_filters('wp_insert_post_empty_content'...或add_filter?我想我都試過,但它不起作用。 –

+0

你會想使用'add_filter('wp_insert_post_empty_content','your_function_name',10,2)'註冊你的過濾器函數,可能有不同於10的優先級。「2」參數很重要,因爲它只會將第一個參數傳遞給函數,否則第一個變量是如果返回爲true,則停止後期創建的變量。 – highvolt

+0

我用這行代碼:add_filter('wp_insert_post_empty_content','check_duplicate_relation','10',2);.如果我的函數check_duplicate_relation返回true ...它應該觸發這個空的內容錯誤,對吧? –