WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

Как отключить корзину в WordPress

По умолчанию удаленные записи, страницы и комментарии в WordPress при удалении попадают в корзину, где на протяжении 30 дней остается возможность для их восстановления. Также можно очищать корзину вручную.

WordPress обладает возможностью отключить эту функцию или изменить срок нахождения данных в корзине.

Вот как выглядит стандартный экран, без внесения изменений в данную функцию:

включенная корзина в wordpress

Для изменения срока хранения в корзине, нужно добавить следующую строку в файл wp-config.php:

define( 'EMPTY_TRASH_DAYS', 7 );

Тут 7 - число дней (по умолчанию 30), после которых данные, которые старше этого срока будут удалены навсегда. Если нужно полностью отключить эту возможность, то добавляем следующее:

define( 'EMPTY_TRASH_DAYS', 0 );

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

отключенная корзина в wordpress

Вместо удалить появляется ссылка удалить навсегда.

Как отключить корзину для типа записи (поста)

Иногда полезно иметь корзину для постов и страниц, но вот для новых созданных типов записей такой функционал совсем не нужен.

Проблема: WordPress не позволяет отключить корзину для типа записи - константа EMPTY_TRASH_DAYS отключает корзину только полностью. Обойти этот момент можно через хук wp_trash_post.

Допустим, нам нужно отключить корзину для типа записи team и page:

add_filter( 'pre_trash_post', 'disable_trash_for_post_type', 10, 2 );
function disable_trash_for_post_type( $null, $post ){

	if( in_array( $post->post_type, ['team','page'] ) ){
		return wp_delete_post( $post->ID, true );
	}

	return $null;
}

Стоит заметить, что функция wp_delete_post( $post_id, $forse_delete ) отправляет в корзину только записи типа page и post. Т.е. если удалять запись через эту функцию, то любая запись произвольного типа будет удалена навсегда, даже есть не указать параметр $force_delete ( принудительное удаление).

Eugene Kopich 100eugenekopich.com
Front-end Developer • Vue.js
Редакторы: Kama 7825
Комментариев нет