我是否需要为添加到我的自定义帖子类型admin中的每个元框添加一个随机数字段?

时间:2012-04-18 作者:Ana Ban

我目前正在处理自定义帖子类型的管理页面,我一直在决定是否为第二个元数据库再次添加nonce字段。我对自定义帖子类型非常陌生,在网上搜索并不会得到那么多结果。

有什么想法吗?谢谢

4 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

我建议这样做。

您确实(而且应该)有自己的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.
  }

}
Thename nonce字段的值应该是metabox唯一的(并且不会与表单上其他插件中的任何其他nonce冲突)。

暂时的value 应为操作所独有(通常应包括数据的来源(例如,编辑帖子而不是快速编辑))。我通常也包括帖子ID。

SO网友:chilljul

您还可以将nonce字段添加到从不消失的提交框中

add_action( \'post_submitbox_start\', \'theme_submitdiv_extra\' );
function theme_submitdiv_extra()
{
  wp_nonce_field( \'theme_meta_box_nonce\', \'meta_box_nonce\' );
}
然后,在save\\u post操作中:

if( !isset( $_POST[\'meta_box_nonce\'] ) || !wp_verify_nonce( $_POST[\'meta_box_nonce\'], \'theme_meta_box_nonce\' ) ) return;

SO网友:Tribalpixel

nonce字段用于验证表单的内容是否来自当前站点上的位置,而不是其他位置。

codex: wp_nonce_field

只有one nonce field per form 是必需的,多用一个对我来说没有意义。

也许你可以调查并使用check_admin_referer() 确保您的请求来自管理页面

SO网友:OZZIE

在WP 3.5.2中,整个编辑页面被包装在一个表单标签中,因此您不应该添加自己的表单标签!!如果仍然这样做,并尝试添加另一个单独的自定义元框,它将在保存时失败,并且仅在尝试保存时引导您到wp admin home!!

另外,也不要添加NONCE字段,因为每个表单只能有一个字段(这也可能会导致它失败!!)并且页面编辑已经有一个nonce字段!

编辑:

事情是1),因为只有one Form-tag 对于整个编辑屏幕,正如正确答案作者所承认的,2)它自动具有nonce 添加到它。为什么要添加更多?It will always have the nonce 不管怎样。。。

这个intent is in my view to edit the page by content or meta data 例如,一个nonce字段。。。而且,当我尝试添加更多内容时,它甚至无法与multiple meta-boxes!! 一个会工作,另一个会失败,只会将用户重定向到wp admin home!

结束