Срабатывает после сохранения новой или обновления существующей записи.
Срабатывает после сохранения новой или обновления существующей записи.
Вызывается после событий save_post_{$post_type} и save_post, но до wp_after_insert_post.
Событие не вызывается для вложений при сохранении через wp_insert_post().
Если нужно обрабатывать только определённый тип записи, используйте событие save_post_{$post_type}, например save_post_product.
wp_insert_post() очищает post_content, post_excerpt и post_content_filtered через wp_filter_post_kses(), если текущий пользователь не имеет возможности unfiltered_html. Заголовок дополнительно очищается через wp_filter_kses().
Это важно при запуске через WP-CLI, WP-Cron, неавторизованный REST-запрос или отдельный скрипт с подключённым wp-load.php. В таких случаях get_current_user_id() обычно возвращает 0, поэтому потенциально опасный HTML, включая <script>, <iframe> и запрещённые атрибуты, может быть удалён без предупреждения. Запись при этом успешно сохраняется, и функция не возвращает ошибку.
Перед сохранением установите пользователя с возможностью unfiltered_html, а затем восстановите исходного пользователя:
$original_user_id = get_current_user_id();
wp_set_current_user( 1 );
try {
$post_id = wp_insert_post(
[
'post_title' => 'Импортированная запись',
'post_content' => $html_content,
'post_status' => 'publish',
],
true
);
} finally {
wp_set_current_user( $original_user_id );
}МультисайтВ мультисайте возможность unfiltered_html доступна только супер-админиам. Обычный администратор отдельного сайта её не имеет. Константа DISALLOW_UNFILTERED_HTML, установленная в true, запрещает эту возможность всем пользователям, включая администраторов и супер-админиов.
add_action( 'wp_insert_post', 'wp_kama_insert_post_action', 10, 3 );
/**
* Function for `wp_insert_post` action-hook.
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
* @param bool $update Whether this is an existing post being updated.
*
* @return void
*/
function wp_kama_insert_post_action( $post_id, $post, $update ){
// action...
}true, если существующая запись была обновлена. false, если создана новая запись.Сохраним время обновления обычной записи в метаполе. Ревизии и автосохранения пропускаются.
add_action( 'wp_insert_post', 'wp_kama_after_insert_post', 10, 3 );
function wp_kama_after_insert_post( $post_id, $post, $update ) {
if (
'post' !== $post->post_type
|| wp_is_post_revision( $post_id )
|| wp_is_post_autosave( $post_id )
) {
return;
}
update_post_meta( $post_id, '_last_processed', time() );
}#2 Обновить запись без рекурсивного вызова обработчикаПеред вызовом wp_update_post() временно отключим обработчик.
add_action( 'wp_insert_post', 'wp_kama_update_post_slug', 10, 3 );
function wp_kama_update_post_slug( $post_id, $post, $update ) {
if ( ! $update || 'product' !== $post->post_type ) {
return;
}
remove_action( 'wp_insert_post', 'wp_kama_update_post_slug', 10 );
wp_update_post(
[
'ID' => $post_id,
'post_name' => sanitize_title( $post->post_title ),
]
);
add_action( 'wp_insert_post', 'wp_kama_update_post_slug', 10, 3 );
}| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | Хук-событие WordPress: edit_post_(post_type) | 0 | 18.33 | 22-09-2026 |
| 2 | Хук-событие WordPress: admin_init | 0 | 23.68 | 20-09-2026 |
| 3 | Хук-событие WordPress: network_admin_edit_(action) | 0 | 21.16 | 01-10-2026 |
| 4 | Хук-событие WordPress: in_widget_form | 0 | 16.25 | 20-09-2026 |
| 5 | Хук-Фильтр WordPress: post_type_link | 0 | 21.11 | 21-09-2026 |
| 6 | Хук-Фильтр WordPress: get_the_excerpt | 0 | 19.09 | 22-09-2026 |
| 7 | Хук-событие WordPress: admin_head | 0 | 23.68 | 20-09-2026 |
| 8 | Хук-событие WordPress: restrict_manage_posts | 0 | 12.4 | 22-09-2026 |
| 9 | Хук-Фильтр WordPress: wp_title | 0 | 18.33 | 20-09-2026 |
| 10 | Хук-Фильтр WordPress: the_category | 0 | 19.09 | 20-09-2026 |