Функция wp_delete_attachment()
позволяет удалить вложение (медиафайл) из медиатеки WordPress, а также удалить все связанные с этим вложением данные. При использовании функции файлы, связанные с вложением, могут быть перемещены в корзину или удалены навсегда в зависимости от переданных параметров.
wp_delete_attachment( int $post_id, bool $force_delete = false ): WP_Post|false|null
Описание
Функция wp_delete_attachment()
удаляет запись о вложении из базы данных WordPress и при необходимости удаляет сам файл с сервера. Она также удаляет все метаданные, таксономии, комментарии, связанные с данным вложением.
Основные моменты:
- По умолчанию, вложение отправляется в корзину, если корзина для медиа включена.
- При использовании параметра
$force_delete = true
, вложение и все его связанные файлы будут удалены без возможности восстановления. - Удаление затрагивает только вложение, основной пост или контент не удаляются.
Параметры
$post_id
(int) — Идентификатор вложения, которое нужно удалить. Обязательный параметр.$force_delete
(bool) — Удалять вложение без перемещения в корзину. При значенииtrue
удаление происходит сразу и окончательно. По умолчаниюfalse
.
Возвращаемое значение
WP_Post
— Объект записи поста при успешном удалении.false
— Если удаление не удалось.null
— Если вложение уже было удалено ранее.
Пример 1: Удаление вложения с перемещением в корзину
Этот пример демонстрирует, как переместить вложение в корзину с помощью функции wp_delete_attachment()
.
$id = 12345; // ID вложения
wp_delete_attachment( $id );
В этом случае вложение не будет удалено окончательно, а перемещено в корзину, если она включена.
Пример 2: Полное удаление вложения
В этом примере мы удалим вложение без перемещения в корзину.
$id = 98765; // ID вложения
wp_delete_attachment( $id, true );
При установке параметра $force_delete = true
, вложение и все связанные с ним файлы удаляются полностью и безвозвратно.
Пример 3: Удаление всех вложений, связанных с постом
Этот пример демонстрирует, как можно удалить все вложения, связанные с определённым постом. Такой код может быть полезен, если нужно автоматически удалять все прикреплённые файлы при удалении поста.
add_action( 'before_delete_post', 'delete_post_attachments' );
function delete_post_attachments( $post_id ) {
$attachments = get_children( array(
'post_type' => 'attachment',
'post_parent' => $post_id,
) );
if ( ! empty( $attachments ) ) {
foreach ( $attachments as $attachment ) {
wp_delete_attachment( $attachment->ID, true );
}
}
}
Этот код вешается на хук before_delete_post
, чтобы удалить все вложения до того, как удаляется сам пост.
Пример 4: Проверка успешности удаления
В следующем примере показано, как можно проверить, было ли удаление вложения успешным, и вывести сообщение в зависимости от результата:
$id = 54321; // ID вложения
if ( wp_delete_attachment( $id, true ) ) {
echo "Вложение успешно удалено.";
} else {
echo "Ошибка: не удалось удалить вложение.";
}
Заключение
Функция wp_delete_attachment()
позволяет легко управлять удалением медиафайлов в WordPress, обеспечивая возможность как простого перемещения файлов в корзину, так и полного их удаления. При работе с этой функцией важно помнить о последствиях удаления файлов, особенно если они используются в контенте сайта, так как это может привести к появлению «битых» ссылок на удалённые файлы.