Чи потрібно мені поле без позначення для кожного мета-вікна, яке я додаю до мого спеціального адміністратора типу публікації?


16

Зараз я працюю на сторінці адміністратора мого користувальницького типу публікації, і я застряг у вирішенні питання про те, чи потрібно знову додавати поле для ніколи для другого метабокса чи ні. Я дуже новачок у користувацьких типах публікацій, і пошук в Інтернеті про це насправді не дає таких результатів.

Будь-які думки? Спасибі.

Відповіді:


13

Я б рекомендував так.

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

Звичайно, з точки зору безпеки, нічого не додається другим питанням, якщо ви не хочете оновлювати лише один метабокс, а не інший: припущення повинні бути унікальними для дії .


Редагувати

Як було зазначено, для екрана редагування публікацій існує лише одна форма. Отже, теоретично вам потрібне лише одне поле без знань, за допомогою якого можна перевірити дію та походження даних. Однак, оскільки метабокси можна видалити - маючи поле без уваги лише в одному метабоксі, немає гарантії, що немає. Помістивши нон-поле у ​​кожну метаполею, ви можете перевірити, чи були дані з цього метабокса надіслані (а насправді є звідки ви вважаєте, що це є) перед обробкою будь-яких даних. Наприклад:

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 повинен бути унікальним для METABOX (і не вступають в протиріччя з будь-якими іншими тимчасовими значеннями, які присутні на формі від інших плагінів).

Нонсо значення має бути унікальним дію (і це , як правило , має включати в себе походження даних (наприклад , редагування-пост , на відміну від швидкого редагування)). Я зазвичай включаю ідентифікатор допису.


хм. але <form>на сторінці адміністратора є лише один тег. має бути поле нонсенс унікальним для форми чи ні? tia, @Stephen
Ana Ban

Так, отже ім'я не має бути унікальним для метабокса, щоб ви могли перевірити його для кожного метаполя. Значення nonce повинно бути унікальним для виконаної дії та походження даних (наприклад, оскільки "швидке редагування" та звичайний екран редагування ініціюють save_postдію).
Стівен Харріс

оновлена ​​відповідь, щоб, сподіваюся, уточнити, що я говорю :)
Стівен Гарріс,

Справа в тому , 1) , так як існує тільки одна форма-тег для екрану всього редагування і 2) він автоматично має тимчасове значення додається до нього. Чому б вам довелося додавати більше? Він завжди матиме незважаючи ні на що ... Я зазначив це у своїй відповіді і зволікаю, дякую людям ... На мій погляд, я можу редагувати сторінку за змістом або метаданими, наприклад. ні одного поля ... Крім того, коли я намагався додати більше, він навіть не працює з декількома мета-полями !!
OZZIE

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

Поле nonce використовується для перевірки того, що вміст форми прийшов з розташування на поточному веб-сайті, а не з іншого місця.

codex: wp_nonce_field

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

можливо, ви можете дослідити та використовувати check_admin_referer (), щоб переконатися, що ваш запит зі сторінки адміністратора


-1

У WP 3.5.2 Вся сторінка редагування загорнута у тег форми, тому НЕ слід додавати власні теги форм !! Якщо все-таки зробити це і спробувати додати інше окреме спеціальне мета-вікно, воно не вдасться при збереженні і приведе вас лише до домашньої програми wp-адміністру при спробі збереження !!

Також НЕ додайте поля NONCE, оскільки там має бути лише одне на форму (це також може призвести до виходу з ладу !!) А редагування сторінки вже не має поля!

Редагувати:

Річ у тому, що 1) оскільки для всього екрана редагування існує лише одна форма-тег , як визнав автор правильної відповіді, і 2) до неї автоматично додається жодне позначення . Чому б вам довелося додавати більше? Він завжди буде мати поняття незалежно від того, що ...

На мій погляд, я маю намір відредагувати сторінку за вмістом або метаданими наприклад. однозначне поле ... Крім того, коли я намагався додати більше, він навіть не працює з декількома мета-полями !! Один буде працювати, а інший вийде з ладу і лише перенаправить користувача на wp-admin home!


Ви опублікували однакову відповідь на два запитання, це було випадково? На кого з двох ви хотіли відповісти?
Рарст

Вибачте випадково, цей. Якщо ви використовуєте firebug або chrome view компонент мета-вікна, доданого з тегом форми в wp 3.6, він автоматично видаляється загорнутою у всій формі для публікації. То як це неправильно? Чому б тоді ви додали декілька полів без значень?
OZZIE

спробуйте, і ви побачите
OZZIE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.