Хуки при смене статусов постов

В версии WordPress 2.3 появилось три вида потрясающих хуков, которые запускаются при смене статуса поста:

  1. transition_post_status,
  2. {старый_статус}_to_{новый_статус},
  3. {новый_статус}_{тип_записи}.

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

А сейчас остановимся на каждом из них поподробнее.

Хук transition_post_status

transition_post_status имеет три параметра:

$new_status
Новый статус поста.
$old_status
Старый статус поста.
$post
Объект поста.

Пример 1. Запускаем функцию при любой смене статуса

function ljubaja_smena_statusa( $new_status, $old_status, $post ) {
	// по сути всё, что нам нужно, это проверить, чтобы старый статус не был равен новому
	if ( $new_status != $old_status ) {
		// дальше выполняем необходимые действия
	}
}
add_action(  'transition_post_status',  'ljubaja_smena_statusa', 10, 3 );

Хук {старый_статус}_to_{новый_статус}

Этот хук имеет только один параметр — объект поста, как видите, статусы задаются непосредственно в самом хуке. Вариантов может быть множество future_to_publish, pending_to_future, draft_to_publish и так далее.

Вот ссылка, где перечислены все стандартные статусы постов.

Пример 2. Запускаем функцию, когда запланированный пост отправляется в публикацию

function v_publikaciju( $post ) {
	// дальше выполняем необходимые действия
}
add_action(  'future_to_publish',  'v_publikaciju', 10, 1 );

Хук {новый_статус}_{тип_записи}

Данный тип хуков очень часто встречается в темах и плагинах WordPress. Уверен, вы уже не раз работали с его разновидностями, например хук publish_post срабатывает при публикации записи, future_post — когда запись меняет свой статус на «Запланированная».

Также вместо post можно указать и другой тип поста, например page (страницы), тогда хук publish_page будет срабатывать уже при публикации страниц.

Пример 3. Функция, срабатывающая при публикации страниц

function publikacija_stranic( $ID, $post ) {
	// хук имеет два параметра - ID поста и объект поста
}
add_action(  'publish_page',  'publikacija_stranic', 10, 2 );

Устаревшие хуки

С версии 2.3 хуки private_to_published и publish_future_post устарели и должны быть заменены на соответствующие новые аналоги.

Старый Новый аналог
private_to_published private_to_publish
publish_future_post future_to_publish
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 5

  • Елена25 августа 2015 в 00:08 #

    Здравствуйте! Может быть здесь ответят на вопрос: как убрать поля "сайт" и "е-мэйл" в комментариях вордпресс? Стандартные хаки и плагины не помогают

    • Марат25 августа 2015 в 10:08 #

      С помощью comment_form() - https://truemisha.ru/blog/wordpress/comment_form.html

      • Елена25 августа 2015 в 11:08 #

        Спасибо! А можно по-подробнее? Что убрать или что добавить? В каком файле?

        • Миша31 августа 2015 в 13:08 #

          Добрый день!
          Сорри за нескорый ответ — был в отъезде.

          В первую очередь вам нужно зайти в админку в «Настройки > Обсуждение» и убрать галочку с «Автор комментария должен указать имя и email».

          Затем вам нужно определить, каким образом у вас выводится форма комментирования:

          1. Откройте файл comments.php, который находится в папке вашей темы, если там присутствует HTML этих полей, то просто удаляем их.
          2. Если же в comments.php их нет, то перейдите по ссылке, которую вам оставил Марат, уверен, вы найдёте решение в описание функции comment_form().
          • Елена31 августа 2015 в 14:08 #

            Спасибо! Я просто выкинула два куска кода из comments.php при помощи интуиции и научного втыка и все теперь выглядит, как я хочу.)

            Подскажите пожалуйста, в лайтбоксе http://girls-art.ru/portfolio/krasivye-blondinki/#lightbox[group]/1/ при нажатии на кнопку Развернуть, картинка почему-то разворачивается не по размеру окна браузера, а на свой полный размер. Как это можно исправить?

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.

  • Артем: Ага, понял. Вот только почему $args? Она же нигде не определена, по логике должна быть переменная $true_field_params или...