Answers:
我会建议。
您确实(并且应该)拥有自己的随机数,可以用来检查数据的来源和用户的意图。如果一个元框只有一个现时数-如果删除该元框(与隐藏的不同),则会遇到问题。如果将其删除,则第二个元框将(或至少应保存)永远不会保存,因为不再发送随机数。
当然,从安全性的角度来看,第二个随机数不会添加任何内容-除非您只希望更新一个元框而不是另一个,否则随机数对于操作来说应该是唯一的。
如前所述,帖子编辑屏幕只有一种形式。因此,从理论上讲,您只需要一个nonce字段即可用来验证数据的作用和来源。但是,由于可以删除元框-通过仅在一个元框中具有一个nonce字段,就不能保证该nonce会在其中。通过在每个metabox中放置一个nonce字段,您可以在处理任何数据之前检查该metabox中的数据是否已发送(实际上是从您认为的位置发送)。例如:
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.
}
}
现时字段的名称对于元框应该是唯一的(并且不与其他插件中表单上存在的任何其他现时冲突)。
随机数值对于操作应该是唯一的(通常应包括数据的来源(例如,与快速编辑相对应的编辑后))。我通常也包括帖子ID。
save_post
操作)。
save_post
可以从各种上下文中调用,因此不能保证随机数。这也是检查您的回调确实必须执行某些操作的便捷方法。添加多个随机数时,请使用唯一的名称。确实有效。
您也可以钩上永不消失的提交框,将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;
现时字段用于验证表单的内容来自当前站点上的位置,而不是其他位置。
只有每形成一个随机数场是必需的,使用更多的是一个不感觉到我。
也许您可以调查并使用check_admin_referer()来确保您的请求来自管理员页面
在WP 3.5.2中,整个编辑页面都包装在一个表单标签中,因此您不应该添加自己的表单标签!如果仍然这样做,并尝试添加另一个单独的自定义元框,则在保存时将失败,并且在尝试保存时只会导致您进入wp-admin主页!
也不要添加NONCE字段,因为每个表单只能有一个NONCE字段(这也可能使它失败!!)而且页面编辑已经具有一个nonce字段!
问题是:1)由于整个编辑屏幕只有一个Form-tag,正如正确答案的作者所承认的那样,并且2)它会自动添加一个随机数。为什么要添加更多?无论如何,它将始终具有随机数。
我的意图是通过内容或元数据(例如)来编辑页面。一个随机数字段...另外,当我尝试添加更多字段时,它甚至无法用于多个元框!一个会工作,另一个会失败,并且只会将用户重定向到wp-admin home!
<form>
管理页面上只有一个标签。随机数字段是否应为表单唯一?tia,@Stephen