Чтобы добавить пользовательские поля в панель быстрого редактирования (Quick Edit) для произвольного типа записей (Custom Post Type) в WordPress, стандартной функции add_action('quick_edit_custom_box', ...) недостаточно. Нужно пройти 3 основных этапа:

  1. Вывести поля в хуке quick_edit_custom_box.
  2. Передать существующие значения из строки таблицы в форму редактирования с помощью JavaScript.
  3. Сохранить данные в хуке save_post.


Допустим, у нас есть кастомный (пользовательский) тип записи course. В каждом курсе есть метаполя duration (длительность курса в месяцах, мета-ключ* course_duration) и lessons (количество занятий, мета-ключ* course_lessons). И эти метаполя выведены в сводную таблицу в админке. Чтобы была возможность отредактировать эти данные в этой таблице, не переходя в редактирование самого курса, выведем их в блок Быстрая правка (Quick Edit в англ. варианте перевода). Этот блок в русской версии открывается при клике на пункт "Свойства" в любом типе постов.
course-table

*мета-ключ - это наименование поля, по которому в базе данных сохраняется его значение.

Пошаговое п добавление полей в панель быстрого редактирование

1. Вывод поля в интерфейсе Quick Edit

Хук quick_edit_custom_box срабатывает при отрисовке формы быстрого редактирования. В нем проверяем тип записи и вывод HTML-разметку:

2. Заполнение полей текущими данными (JavaScript)

Форма Quick Edit создается в DOM один раз и динамически подставляется в выбранную строку. Чтобы заполнить поля актуальными значениями, нужно:

  • Вывести данные в колонку таблицы (или скрытый элемент).
  • Перехватить клик на кнопку «Быстрое редактирование» с помощью JS.

A. Вывод значений в колонку:

B. Скрипт подстановки данных (jQuery):

3. Сохранение данных

Обрабатываем сохранение в хуке save_post:

course-quick-edit

Альтернатива (без написания кода)

Если вы не хотите прописывать всю логику вручную, для добавлений полей в Quick Edit часто используют готовые плагины:

  • Admin Columns Pro — позволяет в пару кликов добавлять любые мета-поля в колонки и в панель быстрого редактирования.

  • ACF Extende (Advanced Custom Fields Extended) — расширение для ACF, которое умеет выводить созданные поля ACF прямо в Quick Ed

  • dit / Bulk Edit.

Возможные проблемы

Здорово, если у вас все пошло хорошо, но возможны и проблемы. Например, дополнительные поля в быстром редактировании у вас совсем не отображаются, а вот столбцы в админке со всеми данными присутствуют.

Если такое происходит, т.е.  колонки в админке выводятся, а сама форма Quick Edit пуста, чаще всего проблема заключается в одной из следующих причин:

  • Имя колонки не совпадает с аргументом хука: хук quick_edit_custom_box передает имя проверяемой колонки в первом параметре ($column_name). Если в коде стоит жесткое условие if ($column_name !== 'my_custom_column'), но slug колонки называется иначе (например, course_duration или duration), разметка просто не отрендерится.
  • Неверный $post_type в проверке: Если внутри колбэка проверяется $post_type, убедитесь, что регистр и имя совпадают с зарегистрированным Custom Post Type (в вашем случае course).
  • Ошибки инициализации хука: Метод/функция вывода полей должна быть корректно подключена с привязкой 2 аргументов: add_action('quick_edit_custom_box', array($this, 'render_quick_edit_fields'), 10, 2); (Если не указать 2, параметр $post_type не передастся в функцию).
  • Скрытие элементов через CSS: WordPress оборачивает быстрое редактирование в определенные классы. Если не используются стандартные обертки WordPress (<fieldset class="inline-edit-col-right"><div class="inline-edit-col">...), админка может скрыть или некорректно отобразить блок.

А что делать, например, если при нажатии в быстром редактировании на кнопку "Сохранить" крутится значок отправки, но сохранение не происходит?

Возможные ошибки в Quick Edit

Бесконечно вращающийся спиннер при попытке сохранения в Quick Edit говорит о том, что процесс сохранения завершается ошибкой на сервере (PHP/Ajax) или сбоем выполнения JavaScript. В этот момент WordPress отправляет AJAX-запрос, но либо не получает валидный JSON-ответ, либо сервер возвращает ошибку 500 / 400.

Чтобы быстро найти и исправить причину, выполните следующие шаги:

1. Проверьте консоль и Ajax-ответ:

Откройте инструменты разработчика в браузере (клавиша F12 или Ctrl+Shift+I / Cmd+Option+I):

  1. Перейдите на вкладку Network (Сеть) и фильтруйте по Fetch/XHR.
  2. Нажмите кнопку Оновити (Сохранить) в форме быстрого редактирования.
  3. В списке появится запрос к admin-ajax.php. Нажмите на него и посмотрите вкладку Response (Ответ).

Если там выводится критическая ошибка PHP или заголовок 500 Internal Server Error, вы сразу увидите строку кода, вызвавшую сбой.

2. Проверьте save_post на бесконечный цикл:

Самая распространенная причина «зависания» — вызов wp_update_post() внутри хука save_post без отключения этого же хука. Это вызывает рекурсию, превышение лимита памяти или тайм-аута:

А если вы просто обновляете мета-данные (update_post_meta), делать вызов wp_update_post() вовсе не нужно.

3. Исправьте отправку и проверку Nonce

Если проверка Nonce не проходит или код принудительно завершает процесс через die() / wp_die() без ответа, Quick Edit зависает.

Проверьте ваш обработчик сохранения:

  1. Замените жесткий wp_die() или return при отсутствии Nonce на корректный выход, чтобы стандартные поля WordPress продолжали сохраняться.
  2. Убедитесь, что при валидации Nonce вы делаете проверку только тогда, когда мета-поле действительно передается в $_POST:

4. Проверьте вывод лишнего текста/PHP Notice:

Если где-то в PHP-файлах (например, в functions.php или подключенных классах) есть вывод лишних символов, пробелов до <?php или ошибок/предупреждений PHP Notice, они ломают JSON-ответ от admin-ajax.php.

Временно включите отладку в wp-config.php, чтобы логировать ошибки в файл, а не выводить их в Ajax-ответ:

После этого повторите попытку сохранения и проверьте файл wp-content/debug.log.

Чтобы проверить, успешна ли отладка, откройте Network в F12 и нажмите «Обновить»: запрос admin-ajax.php должен вернуть статус 200 OK, а строчка с курсом в таблице обновляться без перезагрузки страницы.

Еще АJAX явно где-то видит ошибку, если вы просто пропустили какой-то знак в своем php-файле типа точки, запятой, точки с запятой или скобки (знакомо, не так ли?). Или неверно объявили переменную без знака $, и она стала считаться некой строковой константой. Например, так:

Вы передали константу или имя переменной lessons без знака $ перед ней. PHP наталкивается на необъявленную константу, что вызывает Fatal Error / Undefined constant "lessons", из-за чего сервер отдаёт статус 500 Internal Server Error и Ajax-запрос «зависает» намертво.

Исправляем фатальную ошибку с переменной $lessons:

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

Исправляем проверку Nonce для Quick Edit:
В хуке Quick Edit nonce из обычного метабокса (pc_course_nonce) не отправляется, если вы не добавили скрытый input с этим же именованием в форму быстрого редактирования. Из-за этого условие проверки мгновенно прерывает выполнение методом return, и данные быстрого редактирования вовсе не сохраняются.

Сделайте гибкую проверку nonce с учетом Quick Edit или добавьте fallback:

Заключение

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

Автор: Админ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *