before_delete_post
Срабатывает до того, как пост (запись) будет удалён, в самом начале функции wp_delete_post().
Событие срабатывает до того, как будут произведены какие-либо действия по удалению поста из БД: удаление метаданных, изменение родителя у вложений удаляемого поста.
Срабатывает только в том случае, если запись удаляется из корзины или если корзина отключена, т.е. когда запись удаляется безвозвратно.
Хук не срабатывает, если удаляется вложение (файл медиатеки). Чтобы выполнить действие при удалении вложения, используйте хук delete_post — он срабатывает прямо перед тем, как сама запись будет удалена из базы данных.
Также хук не сработает, если пост перемещается в корзину. Если корзина включена, то этот хук сработает только при удалении поста из корзины.
Используйте хук deleted_post, когда нужно что-то сделать после того, как запись удалена и удалены все её связи и метаданные. Но имейте в виду, что на этот момент записи в БД уже нет, однако базовые данные удалённого поста можно получить из переменных, передаваемых хуку, но не через get_post().
Читайте также: Как запретить удаление отдельных постов (записей)
Смотрите также хуки:
Использование
add_action( 'before_delete_post', 'wp_kama_before_delete_post_action', 10, 2 );
/**
* Function for `before_delete_post` action-hook.
*
* @param int $post_id Post ID.
* @param WP_Post $post Post object.
*
* @return void
*/
function wp_kama_before_delete_post_action( $post_id, $post ){
// action...
}
- $postid(число)
- ID поста, который передается в функцию прикрепленную к событию.
- $post(WP_Post) (WP 5.5)
- Объект записи (поста).
Примеры
#1 Действие при удалении поста
Предположим, мы пишем плагин и нам нужно что-то сделать в тот момент, когда удаляется произвольный тип записи "my_post_type":
add_action( 'before_delete_post', 'my_func' );
function my_func( $postid ){
// Проверяем, наш ли это тип записи удаляется
$post = get_post( $postid );
// если нет, выходим.
if( ! $post || $post->post_type !== 'my_custom_post_type' )
return;
// Код, который выполнит нужное действие при удалении
}
#2 Запретим удаление постов по их ID указанным юзерам
add_action( 'pre_trash_post', 'restrict_post_deletion', 10, 1 );
add_action( 'pre_delete_post', 'restrict_post_deletion', 10, 1 );
function restrict_post_deletion( $delete, $post ){
$user = get_current_user_id();
$restricted_users = [ 21, 25, 54, 2,19 ];
$restricted_pages = [ 2, 21, 52, 64 ];
if( in_array( $user, $restricted_users ) && in_array( $post->ID, $restricted_pages ) ){
wp_die( "You are not authorized to delete this page." )
}
}Список изменений
| С версии 3.2.0 | Введена. |
| С версии 5.5.0 | Added the $post parameter. |
Где вызывается хук
do_action( 'before_delete_post', $post_id, $post );
Где используется хук в WordPress
add_action( 'before_delete_post', '_reset_front_page_settings_for_post' );
add_action( 'before_delete_post', '_reset_privacy_policy_page_for_post' );
add_action( 'before_delete_post', '_wp_before_delete_font_face', 10, 2 );