Хук edit_post
в WordPress срабатывает при обновлении существующей записи. Это событие позволяет выполнять действия, когда пост был изменен, например, для обработки метаданных, уведомлений или синхронизации данных.
do_action( ‘edit_post’, int $post_id, WP_Post $post )
Хук edit_post
активируется каждый раз, когда существует обновление поста, будь то изменение содержания, заголовка или других атрибутов. Важно, что этот хук срабатывает только для уже существующих постов, а не для новых записей, которые только что были созданы.
Это событие схоже с хуком save_post
, но оно активируется только при обновлении поста. Если вам нужно отслеживать как создание, так и обновление записи, используйте хук save_post
. Также начиная с версии WordPress 5.1, был добавлен хук edit_post_(post_type)
, который позволяет вам отслеживать обновления только определенного типа поста.
Параметры
- $post_id (int): ID обновляемой записи.
- $post (WP_Post): Объект записи, которая была обновлена. Это объект типа
WP_Post
, который содержит все данные о записи, такие как заголовок, содержимое и другие атрибуты.
Когда срабатывает хук
- При обновлении существующей записи: Хук срабатывает, когда происходит изменение данных существующего поста.
- После сохранения изменений: Хук срабатывает после того, как изменения были сохранены в базе данных.
Когда хук не срабатывает
- При создании нового поста: Для отслеживания создания новых записей используйте хук
save_post
. - Если запись не была изменена: Если записи не были изменены (например, когда вы нажимаете кнопку «Обновить» без внесения изменений), хук не срабатывает.
Пример 1: Логирование изменений поста
Предположим, вы хотите записывать в лог информацию о каждом обновлении поста. Это полезно для отслеживания, кто и когда обновил запись.
add_action('edit_post', 'log_post_edit', 10, 2);
function log_post_edit($post_id, $post) {
// Проверяем, чтобы избежать зацикливания
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Логируем изменения
$log_message = sprintf('Пост с ID %d был обновлен. Новый заголовок: %s', $post_id, $post->post_title);
error_log($log_message);
}
В этом примере каждый раз, когда пост обновляется, в лог файл записывается сообщение с ID поста и его новым заголовком.
Пример 2: Изменение метаданных поста при обновлении
Допустим, вам нужно обновить метаданные поста, когда он изменяется. Например, при обновлении поста добавлять метку с текущей датой обновления.
add_action('edit_post', 'update_post_metadata', 10, 2);
function update_post_metadata($post_id, $post) {
// Избегаем обновления метаданных во время автосохранений
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// Обновляем или добавляем мета-данные
update_post_meta($post_id, '_last_updated', current_time('mysql'));
}
Здесь при каждом обновлении поста добавляется или обновляется мета-данные, содержащие дату последнего обновления поста.
Пример 3: Использование edit_post_(post_type)
для специфичных типов записей
Если вам нужно выполнять действия только для обновлений определенного типа поста, вы можете использовать хук вида edit_post_(post_type)
. Например, если вы хотите выполнять действия только при обновлении кастомного типа записи my_custom_post_type
, используйте следующий код:
add_action('edit_post_my_custom_post_type', 'custom_post_type_update', 10, 2);
function custom_post_type_update($post_id, $post) {
// Ваш код для обработки обновления кастомного типа записи
error_log('Обновление записи кастомного типа: ' . $post->post_title);
}
В этом примере хук будет срабатывать только при обновлении записей типа my_custom_post_type
.
Заключение
Хук edit_post
предоставляет мощные возможности для обработки обновлений постов в WordPress. Вы можете использовать его для логирования изменений, обновления метаданных, или выполнения других действий, связанных с обновлением существующих записей. Если вам нужно отслеживать обновления только для определенных типов записей, используйте хук edit_post_(post_type)
.