edit_post_(post_type)
Срабатывает после обновления существующей записи указанного типа в БД.
Динамическую часть (post_type) нужно заменить названием типа записи:
- edit_post_post - обычные записи.
- edit_post_page - страницы.
edit_post_book- произвольный типbook.
В wp_insert_post() событие вызывается при обновлении записи (когда указан ID) или через wp_update_post(). При вставке новой записи вызов пропускается.
Сохранение из редактора может быть обновлением уже созданного авто-черновика.
Хук не ограничен админкой. В ядре он также вызывается:
- В wp_publish_post(), в том числе при публикации по расписанию.
- В wp_update_comment_count_now() после пересчёта количества комментариев, даже если число не изменилось.
- В WP_Customize_Manager::trash_changeset_post() при перемещении набора изменений кастомайзера в корзину.
При обновлении через wp_insert_post() порядок событий такой:
edit_post_(post_type)- edit_post
- post_updated
- save_post_(post_type)
- save_post
Бесконечная рекурсия
Вызов wp_update_post() для той же записи внутри коллбэка снова запускает этот хук и может привести к бесконечной рекурсии. Поэтому перед вложенным обновлением временно отключите свой коллбэк через remove_action(), затем подключите обратно.
Параметр $fire_after_hooks = false у wp_insert_post() не отключает это событие.
Для обработки и создания и обновления используйте save_post_(post_type).
Для сравнения полей записи до и после обновления - post_updated.
Для работы после сохранения записи, её терминов и метаданных - wp_after_insert_post.
При обычном обновлении вложения через wp_insert_post() этот хук пропускается: используйте edit_attachment или attachment_updated.
Использование
add_action( 'edit_post_(post_type)', 'wp_kama_edit_post_type_action', 10, 2 );
/**
* Function for `edit_post_(post_type)` action-hook.
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*
* @return void
*/
function wp_kama_edit_post_type_action( $post_id, $post ){
// action...
}
- $post_id(число)
- ID обновлённой записи.
- $post(WP_Post)
Объект записи. Чтобы получить его в коллбэке, передайте
2в четвёртом аргументеadd_action().При вызове из wp_update_comment_count_now() объект загружен до обновления счётчика, поэтому
$post->comment_countсодержит прежнее значение.Для актуальных данных повторно получите запись через
get_post( $post_id ). Если нужны старое и новое значения счётчика, используйте wp_update_comment_count.
Примеры
#1 Сбросим кеш карточки книги после обновления
Предположим, данные карточки книги хранятся в транзиенте myplugin_book_{ID}. Удалим его после обновления записи типа book, чтобы при следующем обращении приложение заново сформировало карточку.
add_action( 'edit_post_book', 'myplugin_clear_book_cache' );
function myplugin_clear_book_cache( $post_id ) {
delete_transient( 'myplugin_book_' . $post_id );
}Список изменений
| С версии 5.1.0 | Введена. |
Где вызывается хук
do_action( "edit_post_{$post->post_type}", $post_id, $post );
do_action( "edit_post_{$post->post_type}", $post->ID, $post );
do_action( "edit_post_{$post->post_type}", $post->ID, $post );
do_action( "edit_post_{$post->post_type}", $post_id, $post );