Intereting Posts
add_filter () не работает, если обратный вызов находится в другом файле в признаке Добавить баннер в панель инструментов Несколько пользовательских типов сообщений Неустранимая ошибка: вызов функции-члена get_page_permastruct () для не-объекта Фоновое изображение заголовка просто перестало работать Ссылка на новую вкладку меню «Меню» Как размещать пользовательские виджеты панели управления на боковой колонке Фильтр поиска с пользовательской таксономией и настраиваемыми полями: как мне обрабатывать его с помощью плагина? Сбросить правила перезаписи после редактирования срока Как показать количество посетителей сайта в моей теме Контактная форма 7 – Отладка отправки сообщений об отказе по электронной почте pre_get_posts не срабатывает вообще короткий код внутри другого короткого кода Проблемы с WordPress Ajax Исключить все сообщения, у которых нет назначенного тега

Определение типа перехода статуса должности

У меня есть функция на моем сайте, которую она должна запускать при публикации новой публикации (уведомление по электронной почте), за исключением одной и той же статьи (например, publish_to_publish переход, я не хочу отправлять ненужные push-уведомления)

Я знаю, что я могу использовать {old_status} для {new_status} действия, но это означает, что я должен указать все переходы для publish ( new_to_publish , draft_to_publish и т. Д.).

Мой вопрос:

  1. Могу ли я использовать вместо этого publish_post и определить, было ли оно publish_to_publish чтобы я мог явно отрицать это? что-то вроде:

     function send_email() { if ($transition == 'publish_to_publish') return; //(else) send email } add_action('publish_post', 'send_email', 10, 1); 
  2. Если нет, как мне привязать несколько крючков к одному и тому же действию? Я просто перечисляю их так:

     add_action('new_to_publish', 'send_mail', 10, 1); add_action('future_to_publish', 'send_mail', 10, 1); add_action('draft_to_publish', 'send_mail', 10, 1); 

Или есть более элегантный способ – как передача массива?

Если нет, как мне привязать несколько крючков к одному и тому же действию? Я просто перечисляю их так:

 add_action('new_to_publish', 'save_new_post', 10, 1); add_action('future_to_publish', 'save_new_post', 10, 1); add_action('draft_to_publish', 'save_new_post', 10, 1); 

Это как раз путь. Просто подключите тот же обратный вызов к каждому из переключателей перехода статуса, по которым вы хотите, чтобы обратный вызов срабатывал.

Мы можем сделать это одним крюком, используя transition_post_status . Все, что нам нужно сделать, это проверить, что старый статус не publish . Мы также можем исключить другие статусы, создав массив этих статусов и проверим против $old_status

Обратите внимание: для этого требуется PHP 5.4+ и не проверен

 add_action( 'transition_post_status', function ( $new_status, $old_status, $post ) { // First check if our new status is publish before we do any work if ( 'publish' !== $new_status ) return; // Create the array of post statuses to check against $statuses = ['publish', 'pending', 'private', 'trash']; // If the old status is an the $statuses array, bail if ( in_array( $old_status, $statuses ) ) return; // Everything checked out, lets do what we are suppose to do // send email }, 10, 3 );