Intereting Posts
Как получить формат опций DB без сохранения? получать постоянные ссылки на сообщения в пользовательском типе сообщений, используя идентификатор сообщения Использовать собственный URL-адрес, который находится вне корневого каталога блога Видеокоды, не работающие в WordPress Динамические идентификаторы в привязках значений пользовательских настроек WordPress список пользователей – показать псевдоним Не удается получить get_post_meta? Разве это не должно быть легко ?! Пользовательский тип сообщения / пользовательская таксономия постоянная ссылка PuTTY сжимается, когда я пытаюсь установить wordpress я не могу войти в панель управления моего сайта WordPress Общая ширина страницы? Автоматическое создание коротких кодов с пользовательскими полями Я ищу визуальный плагин композитора / строителя, который поддерживает RTL Последняя страница комментариев сначала с полным количеством комментариев? Как заменить тег шаблона the_post_thumbnail и показать первое внутри почтового изображения вместо

Как использовать фильтр hook 'post_updated_messages' в связности с действием hook 'save_post'

Я пытаюсь отправить уведомления по электронной почте, SMS и IM для группировки членов этого веб-сайта WordPress, когда страница WordPress в их группе пользователей была опубликована / обновлена.

Я полагал, что использование 'save_post' будет лучшим решением. Тем не менее, я столкнулся с некоторыми раздражающими факторами на пути и считаю, что нашел для них исправить.

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

Теперь проблема, с которой я сталкиваюсь, заключается в том, что я не знаю точно, как правильно использовать фильтр-фильтр 'post_updated_messages' в связности с действием hook 'save_post' . Когда я add_filter('post_updated_messages', array(&$this, 'message')); ссылку на add_filter('post_updated_messages', array(&$this, 'message')); в конструкторе класса он отображает обновленное сообщение, когда я только что появился на экране редактирования и еще не нажал кнопку обновления.

После беседы с @rarst в чате он сообщил мне, что фильтр 'post_updated_messages' был 'post_updated_messages' местом», а не «событием», что дало мне идею переместить ссылку на add_filter('post_updated_messages', array(&$this, 'message')); до $this->save_post(); ,

После перемещения фильтра в $this->save_post(); , теперь я не вижу, что пользовательское обновленное сообщение отображается вообще. Я просто вижу типичное сообщение, обновленное сообщение. Тем не менее, метод группового уведомления все еще срабатывает.

Где лучше всего сделать ссылку на фильтр. Или, если эта ситуация не требует этого конкретного крючка, какой крючок следует использовать и где он должен быть размещен?

Я отметил это как относящееся к разработке плагинов, хотя это всего лишь файл класса, включенный в файл functions.php этой конкретной активной темы WordPress.

Вот приблизительное представление о том, что у меня есть:

 <?php if(!class_exists('tester_class')){ class tester_class{ /** * Initiate! * * @return void **/ public function __construct() { add_action('save_post', array(&$this, 'save_post')); } /** * Display update message * * Outputs a message using post_updated_messages, after the WP save_post action * * @return void **/ public function message(){ _e('<div class="updated"><p><strong>Post updated &amp; Notified all group members!</strong></p></div>'); } /** * Hooks the WP save_post action * * Perform class call after post is saved. * * @return void **/ public function save_post(){ global $flag; if($flag == 0){ $this->send_group_notifications(); add_filter('post_updated_messages', array(&$this, 'message')); } $flag = 1; } /** * Notifies group members * * Sends email, SMS, and IM notifications to all group members. * * @return void **/ public function send_group_notifications(){ // example... } }// EoF tester_class class // Initiate tester_class class $tester_class = new tester_class(); }// EoF tester_class class_exists ?> 

Solutions Collecting From Web of "Как использовать фильтр hook 'post_updated_messages' в связности с действием hook 'save_post'"

Обновлено:

Во-первых, вам нужно будет вернуть значение bool в свой метод уведомлений, чтобы мы могли надежно установить маркер для метода сообщения. Затем вам нужно будет установить элемент массива $ _POST для перехода к фильтру перенаправления.

 public function save_post($post_id){ //Add a $_POST key if you syndicated successfully if($this->send_group_notifications()) //return true from your notification method $_POST['syndicated'] = true; } 

Следующий фильтр работает из вашего файла functions.php . Я не мог заставить его работать правильно из файла плагина. В основном, что происходит здесь, мы вынюхиваем элемент массива $ _POST, который вы установили в действии save_post, и посмотрите, добавим ли переменную строки запроса в перенаправление.

 add_filter('redirect_post_location', 'update_post_redirect'); function update_post_redirect($location){ $syndicated = isset($_POST['syndicated']) ? $_POST['syndicated'] : 0; if($syndicated == true) $location .= '&syndicated=1'; return $location; } 

Затем, наконец, мы вынюхиваем переменную $ _GET, чтобы мы могли определить, должно ли отображаться сообщение.

 public function message($messages){ $syndicated = isset($_GET['syndicated']); if($syndicated) //Do something with the messages array here. return $messages; } 

Отметьте это сообщение для хорошего примера использования этого фильтра: Установите персонализированные сообщения для публикации обновления / сохранения

Надеюсь, что это помогает вам!

Я проверил, как ACF сделал это и попробовал это, работал на меня.

 class Directory_Post_Type { public static $post_type = "directory"; public function __construct() { add_action( 'init', array( $this, 'init' ) ); add_action( 'admin_init', array( $this, 'admin_init' ) ); add_filter('post_updated_messages', array( $this, 'post_updated_messages') ); add_filter('bulk_post_updated_messages', array( $this, 'bulk_post_updated_messages'), 10, 2 ); } ......