¿Necesito un campo nonce para cada meta box que agrego a mi administrador personalizado de tipo de publicación?

13

Actualmente estoy trabajando en la página de administración de mi tipo de publicación personalizada, y me quedé atascado al decidir si agregar o no un campo nonce para el segundo metabox. Soy muy nuevo en los tipos de publicaciones personalizadas, y la búsqueda en línea sobre esto realmente no produce tantos resultados.

¿Algún pensamiento? Gracias.

    
pregunta Ana Ban 18.04.2012 - 19:01

4 respuestas

12

Lo recomendaría así.

Usted tiene (y debe) tener su propio punto con el cual verificar el origen de los datos y la intención del usuario. Si solo tiene un nonce para un metabox, entonces tiene problemas si ese metabox se elimina (no es lo mismo que oculto). Si se elimina, el segundo metabox nunca (o al menos debería) nunca se guardará ya que el nonce ya no se envía.

Por supuesto, desde un punto de vista de seguridad, no se agrega nada a un segundo tipo, a menos que desee actualizar solo un metabox y no el otro: los elementos deben ser exclusivos de la acción .

Editar

Como se señaló, solo hay un formulario para la pantalla de edición posterior. Entonces, en teoría, solo necesita un campo nonce con el que validar la acción y el origen de los datos. Sin embargo, dado que los metaboxes pueden eliminarse, al tener un campo nonce en un solo metabox no hay garantía de que el nonce esté allí. Al colocar un campo nonce en cada metabox, puede verificar si los datos de ese metabox se enviaron (y en realidad son de donde cree que están) antes de procesar los datos. 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.
  }

}

El nombre del campo nonce debe ser único para el metabox (y no debe coincidir con ningún otro elemento que esté presente en el formulario de otros complementos).

El valor nonce debería ser exclusivo de la acción (y esto generalmente debe incluir el origen de los datos (por ejemplo, editar-publicar en lugar de una edición rápida)). Por lo general, también incluyo la ID de la publicación.

    
respondido por el Stephen Harris 18.04.2012 - 20:01
4

También puede enganchar el cuadro de envío que nunca desaparece al agregarle el campo nonce

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

Luego, en tu acción save_post:

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

El campo nonce se usa para validar que los contenidos del formulario provienen de la ubicación en el sitio actual y no en otra parte.

codex: wp_nonce_field

solo se requiere un campo nonce por formulario , usa más de uno que no tenga sentido para mí.

tal vez puedas investigar y usar check_admin_referer () para asegurarte de que tu solicitud sea de una página de administración

    
respondido por el Tribalpixel 18.04.2012 - 19:41
-1

En WP 3.5.2 ¡Toda la página de edición está envuelta en una etiqueta de formulario, por lo que NO debes agregar tus propias etiquetas de formulario! Si aún así lo hace e intente agregar otra meta caja personalizada, se producirá un error al guardar y solo lo llevará a la página de inicio de wp-admin cuando intente guardar.

Tampoco agregue el campo NONCE ya que solo se supone que hay uno por formulario (¡esto también puede hacer que falle!) ¡Y la edición de la página ya tiene un campo nonce!

Editar:

La cosa es 1) ya que solo hay una etiqueta de formulario para toda la pantalla de edición, como ha admitido el autor de la respuesta correcta, y 2) tiene automáticamente un nonce añadido a ello. ¿Por qué tendrías que añadir más? Siempre tendrá el nonce sin importar qué ...

En mi opinión, la intención es editar la página por contenido o metadatos , por ejemplo. un solo campo ... También cuando intenté agregar más, ¡ni siquiera funciona con múltiples meta-cajas ! ¡Uno funcionará y el otro fallará y solo redirigirá al usuario a wp-admin home!

    
respondido por el OZZIE 08.08.2013 - 17:59

Lea otras preguntas en las etiquetas