Коротка порада: метадані та вбудоване редагування
Якщо у вас є настроюване мета-поле або ви працюєте з настроюваними метаданими на пост-рівні, ви можете натрапити на проблему з випадковим видаленням даних під час збереження їх із екрана масового редагування .
Налаштування проблеми приблизно такі:
- у вас є колекція дописів, які потрібно змінити,
- ви завантажуєте всі публікації на екран масового редагування (як показано вище),
- ви застосовуєте зміни.
Щойно це станеться, зміна відбудеться, але вона стирає будь-які власні метадані публікації, які ви можете мати.
Це лише невеликий зразок коду того, як виглядає метод збереження ваших користувальницьких метаданих (тобто я пропускаю кілька захисних пунктів):
<?php
/**
* Save the options in the meta box.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Проблема полягає в тому, що немає перевірки, що це надходить із екрана масового редагування . І через це метадані можуть бути повністю видалені.
Щоб упоратися з цим, нам потрібно перевірити, чи надходить серіалізація з екрана масового редагування . Таким чином ми можемо повернутися раніше і запобігти виконанню коду. У найпростішій формі ви можете зробити щось на зразок цього :
<?php
/**
* Save the options in the meta box. Ignore the action if it's coming from the
* Bulk Edit screen.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
if (isset( $_POST['_inline_edit'])) {
return;
}
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Зауважте, що я не рекомендую використовувати це буквально для універсальних випадків або для універсального використання, оскільки це агресивно. Натомість я вважаю, що варто прочитати цю статтю Codex, щоб отримати більше інформації про те, як вбудоване редагування працює як на стороні сервера, так і на стороні клієнта.
Мета публікації — показати, як користувацькі метадані можна ненавмисно видалити, і закласти основи того, як цьому можна запобігти.