Если у вас есть настраиваемое мета-поле или вы работаете с настраиваемыми метаданными на уровне публикации, вы можете столкнуться с проблемой случайного удаления данных при их сохранении на экране массового редактирования .
Настройка проблемы примерно такая:
- у вас есть коллекция постов, которые нужно изменить,
- вы загружаете все сообщения на экране массового редактирования (как показано выше),
- вы применяете изменение.
Как только это произойдет, изменение произойдет, но оно удалит все пользовательские метаданные публикации, которые у вас могут быть.
Это всего лишь небольшой пример кода того, как выглядит метод сохранения для ваших пользовательских метаданных (то есть я опускаю ряд защитных предложений):
<?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 );
}
Обратите внимание, что я не рекомендую использовать это дословно для универсальных случаев или для универсального использования, поскольку это агрессивно. Вместо этого я думаю, что стоит прочитать эту статью Кодекса, чтобы получить больше информации о том, как встроенное редактирование работает как на стороне сервера, так и на стороне клиента.
Цель поста — показать, как пользовательские метаданные могут быть удалены непреднамеренно, и заложить основы того, как вы можете предотвратить это.