Нужно ли мне поле nonce для каждого мета-поля, которое я добавляю к своему настраиваемому администратору типа сообщения?

В настоящее время я работаю над страницей администратора моего настраиваемого типа сообщений, и я застрял при принятии решения о том, нужно ли снова добавить поле nonce для второго обменника или нет. Я очень новичок в пользовательских типах сообщений, и поиск в Интернете по этому вопросу на самом деле не дает много результатов.

Есть предположения? Благодарю.

Solutions Collecting From Web of "Нужно ли мне поле nonce для каждого мета-поля, которое я добавляю к своему настраиваемому администратору типа сообщения?"

Я бы рекомендовал это сделать.

Вы (и должны) иметь свой собственный nonce, с помощью которого можно проверить происхождение данных и намерение пользователя. Если у вас есть только один nonce для метабокса – тогда вы сталкиваетесь с проблемами, если этот метабокс удален (не тот, который скрыт). Если удалено, то второй метаболизм будет (или, по крайней мере, должен) никогда не сохранять, так как nonce больше отправляется.

Разумеется, с точки зрения безопасности ничто не добавляется вторым nonce – если вы никогда не хотите обновлять один обменный код, а не другой: nonces должен быть уникальным для действия .


редактировать

Как указано, есть только одна форма для экрана редактирования сообщений. Итак, теоретически вам нужно только одно поле nonce, с помощью которого можно проверить действие и происхождение данных. Однако, поскольку метабокс можно удалить – имея поле nonce только в одном обмене, нет гарантии, что nonce будет там. Помещая поле nonce в каждом обмене, вы можете проверить, были ли данные из этого обменника отправлены (и, фактически, из того, что вы думаете), перед обработкой любых данных. Например:

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

Имя поля nonce должно быть уникальным для метабокса (а не столкнуться с любыми другими nonce, которые присутствуют в форме из других плагинов).

Значение nonce должно быть уникальным для действия (и это обычно должно включать в себя источник данных (например, edit-post, а не quick-edit)). Обычно я включаю также идентификатор сообщения.

Вы также можете подключить окно отправки, которое никогда не исчезает, добавляя к нему поле 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; 

Поле nonce используется для проверки того, что содержимое формы появилось из местоположения на текущем сайте, а не в другом месте.

codex: wp_nonce_field

требуется только одно поле nonce для каждой формы , используйте больше, чтобы это не было для меня.

возможно, вы можете исследовать и использовать check_admin_referer (), чтобы убедиться, что ваш запрос находится на странице администратора

В WP 3.5.2 Вся страница редактирования обернута в тег формы, поэтому вы НЕ должны добавлять свои собственные теги форм! Если вы все еще это сделаете и попытаетесь добавить другой отдельный мета-код, он будет сбой при сохранении и приведет вас только к wp-admin домой при попытке сэкономить!

Также НЕ добавляйте поле NONCE, так как должно быть только одно для формы (это также может привести к сбою!) И у редактирования страницы уже есть поле nonce!

Редактировать:

Дело в том, что 1), поскольку на весь экран редактирования есть только один тег Form , как признал правильный автор ответов, и 2) он автоматически добавляет к нему добавленный nonce . Зачем вам нужно добавлять больше? У него всегда будет nonce независимо от того, что …

На мой взгляд, цель состоит в том, чтобы отредактировать страницу по содержанию или метаданным, например. одно поле nonce … Также, когда я пытался добавить больше, он даже не работает с несколькими мета-боксами !! Один будет работать, а другой не удастся и перенаправит пользователя только в wp-admin домой!