✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Быстрый совет: метаданные и встроенное редактирование

31

Если у вас есть настраиваемое мета-поле или вы работаете с настраиваемыми метаданными на уровне публикации, вы можете столкнуться с проблемой случайного удаления данных при их сохранении на экране массового редактирования .

Настройка проблемы примерно такая:

  1. у вас есть коллекция постов, которые нужно изменить,
  2. вы загружаете все сообщения на экране массового редактирования (как показано выше),
  3. вы применяете изменение.

Как только это произойдет, изменение произойдет, но оно удалит все пользовательские метаданные публикации, которые у вас могут быть.

Это всего лишь небольшой пример кода того, как выглядит метод сохранения для ваших пользовательских метаданных (то есть я опускаю ряд защитных предложений):

<?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 );

}

Обратите внимание, что я не рекомендую использовать это дословно для универсальных случаев или для универсального использования, поскольку это агрессивно. Вместо этого я думаю, что стоит прочитать эту статью Кодекса, чтобы получить больше информации о том, как встроенное редактирование работает как на стороне сервера, так и на стороне клиента.

Цель поста — показать, как пользовательские метаданные могут быть удалены непреднамеренно, и заложить основы того, как вы можете предотвратить это.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее