Одна из самых сильных сторон WordPress — это система хуков (фильтров и экшенов), которая позволяет добавлять свои колбеки на разные события, произошедшие в ядре системы.
Довольно распространенная практика — оповещение подписчиков по email или push о выходе нового поста.
Для этого большинство программистов используют хук publish_post
, что является неверным решением задачи, так как это событие всплывается также при нажатии кнопки Обновить
на экране редактирования поста.
Тем самым ваши уведомления уйдут пользователю столько раз, сколько вы отредактируете свой пост после публикации.
Покопавшись более детально в документации по WordPress и поспрошая на форумах пришел к тому, что нужно использовать хук изменения статуса поста transition_post_status
:
/** * Отправка уведомлений при публикации поста */ function roomble_send_notification( $new_status, $old_status, $post ) { if( 'publish' === $new_status && 'publish' !== $old_status && 'post' === $post->post_type ) { // Тут код отправки уведомления, например } } add_action( 'transition_post_status', 'roomble_send_notification', 10, 3 );
Событие transition_post_status
возникает, когда пост переходит из одного статуса в другой. Внутри функции-зацепа мы проверяем, что тип поста post
, запись переходит в состояние publish
(опубликована) и предыдущий статус не был publish
, иначе это свидетельствовало бы о том, что мы редактируем пост.
Источник: WordPress Publish Post Hook
Источник: https://www.kobzarev.com/wordpress/wordpress-publish-post-hook/