Почему я не могу подключиться к save_posts после admin_init?

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

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

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

Solutions Collecting From Web of "Почему я не могу подключиться к save_posts после admin_init?"

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

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

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

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

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

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