Как запретить удаление отдельных постов (записей)

Часто бывает что на сайте есть важные системные страницы, удалять которые нельзя, потому что какой-то функционал сайта перестанет работать.

Для таких важных страниц хорошо полностью отключить возможность удаления. Также эти страницы можно пометить в таблице что они системные:

Отключим возможность удалять указанные страницы

Тип поста и слаг (post_name) страниц которые нельзя будет удалить, указывается в списке $SPECIAL:

<?php

if( ! is_admin() ){
	return;
}

WPKama_Special_Pages::init();

final class WPKama_Special_Pages {

	public static array $SPECIAL = [
		'page' => [
			'describe_function',
			'profile',
			'pay',
			'search',
			'test',
		]
	];

	public static function init(){

		add_filter( 'display_post_states', [ __CLASS__, 'mark_in_post_list_page' ], 10, 2 );

		add_action( 'pre_trash_post', [ __CLASS__, 'restrict_post_deletion' ], 10, 2 );
		add_filter( 'pre_delete_post', [ __CLASS__, 'restrict_post_deletion' ], 10, 2 );

		add_filter( 'page_row_actions', [ __CLASS__, 'remove_row_action' ], 10, 2 );
	}

	public static function mark_in_post_list_page( array $post_states, $post ): array {

		if( self::is_post_in_list( $post ) ){
			$post_states[] = '<small>SYSTEM</small>';
		}

		return $post_states;
	}

	public static function remove_row_action( array $actions, $post ): array {

		if( self::is_post_in_list( $post ) ){
			unset( $actions['delete'] );
		}

		return $actions;
	}

	public static function restrict_post_deletion( $delete, $post ){

		if( self::is_post_in_list( $post ) ){
			/** @noinspection ForgottenDebugOutputInspection */
			wp_die( "`$post->post_name` page can not be deleted - it is special page." );
		}

		return $delete;
	}

	private static function is_post_in_list( $post ): bool {

		if( empty( $post->post_type ) ){
			return false;
		}

		$list = self::$SPECIAL[ $post->post_type ] ?? [];

		return in_array( $post->post_name, $list, true );
	}

}

Теперь при попытке удалить системный пост, будет вылетать такое сообщение: