2016-09-30 82 views
0

我有供應商有自己的產品。 WP後端幾乎被重新設計,並且我有一個頁面(帶有表格),其中「管理員」可以添加新的供應商,並且我需要爲表單提交時爲每個供應商創建唯一的參考編號。如何創建唯一的參考號碼 - wordpress

另外,我有一個「排序」下拉列表,其中一個排序選項是「參考編號」。

起初,我以爲使用POST ID作爲參考號碼,但不認爲這可能是最好的解決方案,因爲POST ID將會有所不同,當一些帖子將被刪除。此外,我正在考慮使用uniqid()功能與一些數字限制和只有數字。

什麼是最好達成此目的?有任何想法嗎?

回答

1

您可以指定一個新的自定義元字段(即supplier_id)並創建一個函數,以確保此supplier_id是唯一的。每次提交供應商表格時都會執行此功能。

無論何時創建或更新帖子或頁面,都會觸發動作鉤save_post。所以我們可以用它來達到這個目的。

從文檔:

save_post每次創建或更新文章或頁面的操作觸發,這可能是來自進口,後/頁的編輯形式,xmlrpc的,或交電子郵件。帖子的數據存儲在$ _POST,$ _GET或全局$ post_data中,具體取決於帖子的編輯方式。例如,快速編輯使用$ _POST。

function save_supplier_id($post_id, $post, $update) { 

    $post_type = get_post_type($post_id);  
    if ("supplier" != $post_type) return;  

    if (isset($_POST['supplier_id'])) { 

     $my_supplier_id = $_POST['supplier_id']; 

     if (! is_int($my_supplier_id)) $my_supplier_id = 1; 

     $all_other_suppliers = get_posts(array(
      'posts_per_page' => -1,   
      'post_type'  => 'supplier', 
      'post__not_in'  => array($post_id)   
     )); 

     $all_other_ids = array_map(function($supplier) { return $supplier->ID; }, all_other_suppliers); 

     if (count($all_other_ids) && in_array($my_supplier_id, $all_other_ids)) { 
      // ID is already in use by another supplier, let's create an new one 
      $my_supplier_id = max($all_other_ids) + 1; 
     } 

     update_post_meta($post_id, 'supplier_id', $my_supplier_id)); 
    }  
} 
add_action('save_post', 'save_supplier_id', 10, 3); 

Explantion:

因爲這個動作被觸發後已保存之後,你可以很容易地通過使用get_post($ POST_ID)

實例訪問這個帖子對象: supplier_id的格式很簡單,是一個連續的數字。如果提供的ID不是整數,我們將其設置爲1.現在我們獲得所有其他供應商ID,並檢查給定ID是否出現兩次。如果是這樣,我們得到的最大ID,並增加1。

+0

並與uniqid()? @Andy Tschiersch – aidadev

+0

海事組織一個三位數的連續數字應該足夠了。 –

+0

你有一些關於如何做到這一點的例子嗎? @Andy Tschiersch – aidadev