WordPress как на ладони
Очень Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

before_delete_postхук-событиеWP 3.2.0

Срабатывает до того как пост (запись) будет удалена, в самом начале функции 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     $postid Post ID.
 * @param WP_Post $post   Post object.
 *
 * @return void
 */
function wp_kama_before_delete_post_action( $postid, $post ){

	// action...
}
$postid(число)
ID поста, который передается в функцию прикрепленную к событию.
$post(WP_Post) (WP 5.5)
Объект записи (поста).

Примеры

0

#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;

	// Код который будет делать что нам нужно при удалении
}
0

#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.

Где вызывается хук

wp_delete_post()
before_delete_post
wp-includes/post.php 3407
do_action( 'before_delete_post', $postid, $post );

Где используется хук в WordPress

wp-includes/default-filters.php 539
add_action( 'before_delete_post', '_reset_front_page_settings_for_post' );
3 комментария
    Войти