Preciso de um campo nonce para cada meta box que eu adiciono ao meu tipo de post personalizado admin?

13

Atualmente, estou trabalhando na página de administração do meu tipo de postagem personalizado e fiquei decidido a adicionar um campo nonce novamente para o segundo metabox ou não. Sou muito novo em tipos de postagens personalizadas e pesquisar on-line sobre isso não produz muitos resultados.

Alguma ideia? Obrigado.

    
por Ana Ban 18.04.2012 / 19:01

4 respostas

12

Eu recomendaria isso.

Você tem (e deve) ter seu próprio nonce para verificar a origem dos dados e a intenção do usuário. Se você tem apenas um nonce para um metabox - então você tem problemas se esse metabox é removido (não é o mesmo que oculto). Se removido, o segundo metabox irá (ou pelo menos deverá) nunca salvar uma vez que o nonce é enviado mais tempo.

É claro que, do ponto de vista da segurança, nada é adicionado por um segundo nonce - a menos que você deseje atualizar apenas um metabox e não o outro: nonces deve ser exclusivo da ação .

Editar

Como apontado, há apenas um formulário para a tela de pós-edição. Portanto, em teoria, você precisa apenas de um campo nonce para validar a ação e a origem dos dados. No entanto, uma vez que os metaboxes podem ser removidos - por ter um campo de nonce em apenas um metabox, não há garantia de que o nonce estará lá. Ao colocar um campo nonce em cada metabox, você pode verificar se os dados desse metabox foram enviados (e é realmente de onde você pensa que é) antes de processar quaisquer dados. Por exemplo:

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.
  }

}

O nome do campo nonce deve ser exclusivo do metabox (e não colidir com quaisquer outras entidades que estejam presentes no formulário a partir de outros plug-ins).

O nonce valor deve ser exclusivo da ação (e isso geralmente deve incluir a origem dos dados (por exemplo, editar postagem em oposição à edição rápida)). Eu geralmente incluo o ID do post também.

    
por Stephen Harris 18.04.2012 / 20:01
4

Você também pode ligar a caixa de envio que nunca desaparece adicionando o campo nonce a ele

add_action( 'post_submitbox_start', 'theme_submitdiv_extra' );
function theme_submitdiv_extra()
{
  wp_nonce_field( 'theme_meta_box_nonce', 'meta_box_nonce' );
}

Em seguida, na sua ação save_post:

if( !isset( $_POST['meta_box_nonce'] ) || !wp_verify_nonce( $_POST['meta_box_nonce'], 'theme_meta_box_nonce' ) ) return;
    
por chilljul 18.10.2013 / 17:07
1

O campo nonce é usado para validar que o conteúdo do formulário veio da localização no site atual e não em outro lugar.

codex: wp_nonce_field

apenas um campo nonce por formulário é necessário, use mais que um como não sendo bom para mim.

talvez você possa investigar e usar check_admin_referer () para ter certeza de que sua solicitação é de uma página de administração

    
por Tribalpixel 18.04.2012 / 19:41
-1

No WP 3.5.2 Toda a página de edição é encapsulada em uma tag de formulário, então você NÃO deve adicionar suas próprias tags de formulário !! Se ainda assim fizer isso e tentar adicionar outra meta box customizada separada, ela falhará ao salvar e somente levará você ao wp-admin home quando tentar salvar !!

Além disso, NÃO inclua o campo NONCE, pois supõe-se que haja apenas um por formulário (isso também pode fazer com que ele falhe !!) E a edição da página já possui um campo nonce!

Editar:

A coisa é 1) já que há apenas uma tag de formulário para toda a tela de edição, como o autor da resposta correta admitiu, e 2) automaticamente tem um nonce adicionado a ele. Por que você teria que adicionar mais? Sempre terá o nonce não importa o que ...

A intenção é, na minha opinião, editar a página por conteúdo ou metadados , por exemplo. um campo nonce ... Além disso, quando eu tentei adicionar mais, ele nem funciona com múltiplas meta-caixas !! Um funcionará e o outro falhará e apenas redirecionará o usuário para o wp-admin home!

    
por OZZIE 08.08.2013 / 17:59