我建议这样做。
您确实(而且应该)有自己的nonce来检查数据的来源和用户的意图。如果一个元盒只有一个nonce,那么如果删除该元盒(与隐藏不同),就会遇到问题。如果删除了第二个元盒,则将(或至少应该)永远不会保存,因为nonce的发送时间更长。
当然,从安全的角度来看,第二个nonce不会添加任何内容,除非您希望只更新一个metabox而不更新另一个:nonces should be unique to the action.
如前所述,编辑后屏幕只有一个表单。因此,理论上,您只需要一个nonce字段来验证操作和数据的来源。然而,由于可以删除元盒-通过在一个元盒中只有一个nonce字段,无法保证nonce会存在。通过在每个元数据库中放置一个nonce字段,您可以在处理任何数据之前检查该元数据库中的数据是否已发送(实际上是从您认为的位置发送的)。E、 g:
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.
}
}
The
name nonce字段的值应该是metabox唯一的(并且不会与表单上其他插件中的任何其他nonce冲突)。
暂时的value 应为操作所独有(通常应包括数据的来源(例如,编辑帖子而不是快速编辑))。我通常也包括帖子ID。