Почему я не могу подключиться к сохранению сообщений после инициализации администратора?


Я пытаюсь подключиться к действию "save_post" из обратного вызова AJAX в моем плагине, но, похоже, это не работает. На самом деле, подключение к "save_posts", похоже, работает только с нескольких ключевых точек выполнения действий (например, "init" или "admin_init"), но не с других (например, обратный вызов "add_meta_boxes").

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

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

Author: danblaker, 2011-05-07

2 answers

Добавление функции в крючки - это операция во время выполнения, она не является постоянной. Какую бы операцию подключения вы ни выполняли в действиях Ajax - они выполняются в отдельном экземпляре WP и истекают, как только возвращается ответ Ajax. Они не оказывают никакого влияния на загруженную в данный момент страницу.

Вероятно, вам нужно подключить свою функциональность к save_post как обычно (не в действии Ajax) и проверить, есть ли у вас дополнительный метабокс для его обработки.

 2
Author: Rarst, 2011-05-07 13:53:15

Я буквально ломал голову над связанной с этим проблемой, и это первое, что я прочитал в Интернете, которое дало четкий указатель на то, что я делал неправильно.

Оказывается, add_meta_boxes вызывается позже, чем save_post, поэтому вам нужно будет настроить крючок сохранения ДО создания метабокса. Поначалу кажется нелогичным, но разметка обычно создается ПОСЛЕ того, как Wordpress проходит обработку, поэтому имеет смысл, что крючки настраиваются до того, как будет создан метабокс отображенный.

К счастью, у меня было немного кода, который был привязан к крючку admin_init, который срабатывал до save_post, так что решить проблему стало действительно легко.

Еще раз спасибо за публикацию этого вопроса. Это было не совсем то, что я искал, но это намекало на решение проблемы.

 1
Author: akamaozu, 2013-05-14 23:31:00