Як у WordPress заборонити видалення окремих сторінок (записів)

Привіт:) У цьому пості покажу, як у WordPress заборонити видалення окремих сторінок (записів) .

Така задача виникає, коли на сайті є важливі сторінки, видалення яких призведе до помилок в індексації пошукових систем або порушення роботи сайту. Тому є смисл заборонити їх видалення.

Наведений нижче код розмістіть у файлі functions.php.

if ( ! is_admin() ) {
	return;
}

final class MP_Important_Pages {
	public static array $importantPages = [
		'page' => [
			'sample-page',
			'page-2',
			'page-3',
		]
	];

	public static function mp_init() {
		add_filter( 'display_post_states', [ __CLASS__, 'mp_mark_in_post_list_page' ], 10, 2 );
		add_action( 'pre_trash_post', [ __CLASS__, 'mp_restrict_post_deletion' ], 10, 2 );
		add_filter( 'pre_delete_post', [ __CLASS__, 'mp_restrict_post_deletion' ], 10, 2 );
		add_filter( 'page_row_actions', [ __CLASS__, 'mp_remove_row_action' ], 10, 2 );
	}

	public static function mp_mark_in_post_list_page( array $postStates, $post ): array {
		if( self::mp_is_post_in_list( $post ) ) {
			$postStates[] = '<small>НЕ ПІДЛЯГАЄ ВИДАЛЕННЮ</small>';
		}

		return $postStates;
	}

	public static function mp_remove_row_action( array $actions, $post ): array {
		if( self::mp_is_post_in_list( $post ) ) {
			unset( $actions['delete'] );
		}

		return $actions;
	}

	public static function mp_restrict_post_deletion( $delete, $post ) {
		if( self::mp_is_post_in_list( $post ) ) {
			wp_die( "Сторінка `$post->post_name` не може бути видалена!" );
		}

		return $delete;
	}

	private static function mp_is_post_in_list( $post ): bool {
		if( empty( $post->post_type ) ) {
			return false;
		}

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

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

У коді потрібно дещо змінити. Так, у змінній $importantPages рядок "page" — це тип записів. Значення "page" відповідає за Сторінки, "post" — за Записи. Далі у цьому масиві йде перелік слагів (post_name) сторінок, які заборонено видаляти.

Напроти заборонених до видалення сторінок/записів у списку буде помітка "НЕ ПІДЛЯГАЄ ВИДАЛЕННЮ".

При спробі видалити таку сторінку користувач побачить повідомлення

Повідомлення при спробі видалення сторінки WordPress

Михайло Петров
Михайло Петров

Мене звати Михайло. Я є WordPress-розробником. Створюю сайти з "нуля", розробляю плагіни, оновлюю наявний функціонал та підтримую готові проєкти.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *