我添加到自定义帖子类型管理员中的每个元框都需要一个随机数字段吗?


16

我目前正在使用自己的自定义帖子类型的管理页面,并且无法确定是否再次为第二个metabox添加现时字段。我对自定义帖子类型非常陌生,并且在线搜索有关此内容实际上并不会产生太多结果。

有什么想法吗?谢谢。

Answers:


13

我会建议。

您确实(并且应该)拥有自己的随机数,可以用来检查数据的来源和用户的意图。如果一个元框只有一个现时数-如果删除该元框(与隐藏的不同),则会遇到问题。如果将其删除,则第二个元框将(或至少应保存)永远不会保存,因为不再发送随机数。

当然,从安全性的角度来看,第二个随机数不会添加任何内容-除非您只希望更新一个元框而不是另一个,否则随机数对于操作来说应该是唯一的


编辑

如前所述,帖子编辑屏幕只有一种形式。因此,从理论上讲,您只需要一个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。


嗯。但<form>管理页面上只有一个标签。随机数字段是否应为表单唯一?tia,@Stephen
Ana Ban

是的,因此现时名称对于元框应该是唯一的,以便您可以为每个元框进行检查。随机数值对于所执行的操作和数据的来源应该是唯一的(例如,由于“快速编辑”和常规编辑屏幕均会触发该save_post操作)。
Stephen Harris

更新的答案,希望能澄清我的意思:)
Stephen Harris

问题是:1)因为整个编辑屏幕上只有一个Form-tag,而2)它会自动添加一个随机数。为什么要添加更多?无论如何,它总是会出现随机数。。。我在回答中指出了这一点,然后投票了,谢谢大家。。。我的意图是按照内容或元数据来编辑页面。一个随机数字段...另外,当我尝试添加更多字段时,它甚至无法用于多个元框!
OZZIE 2013年

1
看我的答案。save_post可以从各种上下文中调用,因此不能保证随机数。这也是检查您的回调确实必须执行某些操作的便捷方法。添加多个随机数时,请使用唯一的名称。确实有效。
史蒂芬·哈里斯

5

您也可以钩上永不消失的提交框,将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;


-1

在WP 3.5.2中,整个编辑页面都包装在一个表单标签中,因此您不应该添加自己的表单标签!如果仍然这样做,并尝试添加另一个单独的自定义元框,则在保存时将失败,并且在尝试保存时只会导致您进入wp-admin主页!

也不要添加NONCE字段,因为每个表单只能有一个NONCE字段(这也可能使它失败!!)而且页面编辑已经具有一个nonce字段!

编辑:

问题是:1)由于整个编辑屏幕只有一个Form-tag,正如正确答案的作者所承认的那样,并且2)它会自动添加一个随机数。为什么要添加更多?无论如何,它将始终具有随机数

意图是通过内容或元数据(例如)来编辑页面。一个随机数字段...另外,当我尝试添加更多字段时,它甚至无法用于多个元框!一个会工作,另一个会失败,并且只会将用户重定向到wp-admin home!


您在两个问题上发表了相同的答案,这是偶然的吗?您是要回答这两个中的哪一个?
拉斯特

对不起,这是偶然的。如果您在wp 3.6中使用添加了表单标签的meta框的firebug或chrome视图组件,则会自动删除整个表单中的包装。那么,这怎么了?那为什么要添加几个随机数字段呢?
OZZIE 2013年

试试看,您会看到
OZZIE 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.