Як у 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
) сторінок, які заборонено видаляти.
Напроти заборонених до видалення сторінок/записів у списку буде помітка "НЕ ПІДЛЯГАЄ ВИДАЛЕННЮ".
При спробі видалити таку сторінку користувач побачить повідомлення