問題描述
我正在處理我的自定義帖子類型的管理頁面,而我決定是否再次為第二個 metabox 添加一個 nonce 字段。我對於自定義帖子類型非常新鮮,並且在線搜索這一點並不能真正產生很多結果。
有什麼想法嗎?謝謝。
最佳解決方案
我會推薦的。
您 (並且應該) 擁有自己的隨機數,用於檢查數據的來源和用户的意圖。如果您只有一個代替結構的隨機數,那麼如果該元組元被刪除,則遇到問題 (與隱藏的相同) 。如果刪除了第二個 metabox 將 (或至少應該) 永遠不會保存,因為隨機存取被髮送。
當然從安全的角度來看,沒有任何東西被第二個隨機數添加 – 除非你只希望只更新一個 metabox 而不是另一個:對於動作來説,nonces 應該是唯一的。
Edit
正如所指出的那樣,只有一個表單用於後編輯屏幕。因此,理論上,您只需要一個隨機數字段來驗證數據的動作和起源。然而,因為 metaboxes 可以被刪除 – 通過在一個 metabox 中有一個 nonce 字段,不能保證隨機數將在那裏。通過在每個 metabox 中放置一個 nonce 字段,您可以在處理任何數據之前檢查來自該代表變體的數據是否已被髮送 (實際上是您認為的) 。例如:
save_post_call_back($post_id){
//Check this is not an auto-save route
if(nonce of metabox1 present and valid){
//Process data from metabox1
}else{
//Either metabox removed - or invalid nonce. Take no action.
}
if(nonce of metabox2 present and valid){
//Process data from metabox2
}else{
//Either metabox removed - or invalid nonce. Take no action.
}
}
nonce 字段的名稱應該對於 metabox 是唯一的 (而不是與其他 plug-ins 的表單中存在的任何其他隨機數衝突) 。
該動作值應該對該動作是唯一的 (這通常應包括數據的來源 (例如 edit-post 而不是 quick-edit)) 。我通常也包括帖子 ID 。
次佳解決方案
你也可以勾選提交框,從不會將 nonce 字段添加到其中
add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}
然後,在您的 save_post 操作中:
if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。