wp_delete_attachment()

Перемещает в корзину или удаляет вложение
Функция WordPress
INT 2.0.0
WordPress Icon

Описание функции

Функция wp_delete_attachment() удаляет или перемещает в корзину вложение (изображение, аудио, видео и т. д.) в WordPress.

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

Использование

wp_delete_attachment( int $post_id, bool $force_delete = false ): WP_Post|false|null

Функция wp_delete_attachment() принимает два параметра:

  • $post_id (обязательный) — идентификатор вложения, которое нужно удалить.
  • $force_delete (необязательный) — параметр, указывающий, нужно ли пропустить корзину и немедленно удалить вложение. По умолчанию установлено значение false.
  • $post_id (int) — Обязательный. Идентификатор вложения.
  • $force_delete (bool) — Необязательный. Указывает, нужно ли пропустить корзину и немедленно удалить вложение. По умолчанию: false.

Функция возвращает данные поста (WP_Post) в случае успешного удаления, false или null в случае ошибки.

<?php
$attachment_id = 123; // Идентификатор вложения, которое нужно удалить
// Удаление вложения
$result = wp_delete_attachment( $attachment_id, true );
if ( $result instanceof WP_Post ) {
    // Вложение успешно удалено
    echo 'Вложение успешно удалено';
} elseif ( false === $result ) {
    // Ошибка удаления
    echo 'Ошибка удаления вложения';
} elseif ( null === $result ) {
    // Некорректный идентификатор вложения
    echo 'Некорректный идентификатор вложения';
}
?>

В приведенном выше примере кода мы удаляем вложение с идентификатором 123 и передаем параметр true для пропуска корзины и немедленного удаления. Затем мы проверяем результат удаления и выводим соответствующее сообщение.

Примеры использования

Удаление вложения без перемещения в корзину


/**
 * Delete an attachment without moving it to the trash.
 *
 * @param int $post_id Attachment ID.
 * @param bool $force_delete Optional. Whether to bypass Trash and force deletion. Default false.
 * @return WP_Post|false|null Post data on success, false or null on failure.
 */
$attachment_id = 123;
$result = wp_delete_attachment($attachment_id);
if ( false === $result ) {
    echo 'Failed to delete attachment.';
} else {
    echo 'Attachment deleted successfully.';
}

Перемещение вложения в корзину


/**
 * Move an attachment to the trash.
 *
 * @param int $post_id Attachment ID.
 * @param bool $force_delete Optional. Whether to bypass Trash and force deletion. Default false.
 * @return WP_Post|false|null Post data on success, false or null on failure.
 */
$attachment_id = 123;
$result = wp_delete_attachment($attachment_id);
if ( false === $result ) {
    echo 'Failed to move attachment to trash.';
} else {
    echo 'Attachment moved to trash successfully.';
}

Определение успешного удаления вложения


/**
 * Check if an attachment was successfully deleted.
 *
 * @param int $post_id Attachment ID.
 * @param bool $force_delete Optional. Whether to bypass Trash and force deletion. Default false.
 * @return WP_Post|false|null Post data on success, false or null on failure.
 */
$attachment_id = 123;
$result = wp_delete_attachment($attachment_id);
if ( false === $result ) {
    echo 'Failed to delete attachment.';
} elseif ( null === $result ) {
    echo 'Attachment does not exist.';
} else {
    echo 'Attachment deleted successfully.';
}

Принудительное удаление вложения


/**
 * Force delete an attachment without moving it to the trash.
 *
 * @param int $post_id Attachment ID.
 * @param bool $force_delete Optional. Whether to bypass Trash and force deletion. Default false.
 * @return WP_Post|false|null Post data on success, false or null on failure.
 */
$attachment_id = 123;
$result = wp_delete_attachment($attachment_id, true);
if ( false === $result ) {
    echo 'Failed to force delete attachment.';
} else {
    echo 'Attachment force deleted successfully.';
}

Проверка наличия вложения перед удалением


/**
 * Check if an attachment exists before deleting it.
 *
 * @param int $post_id Attachment ID.
 * @param bool $force_delete Optional. Whether to bypass Trash and force deletion. Default false.
 * @return WP_Post|false|null Post data on success, false or null on failure.
 */
$attachment_id = 123;
$attachment = get_post($attachment_id);
if ( ! $attachment ) {
    echo 'Attachment does not exist.';
} else {
    $result = wp_delete_attachment($attachment_id);
    if ( false === $result ) {
        echo 'Failed to delete attachment.';
    } else {
        echo 'Attachment deleted successfully.';
    }
}

Вопросы и ответы

Как удалить вложение без перемещения в корзину?

Для удаления вложения без перемещения в корзину используется функция wp_delete_attachment(). Она принимает два параметра: $post_id — идентификатор вложения, которое нужно удалить, и $force_delete — логическое значение, указывающее, нужно ли игнорировать корзину и принудительно удалить вложение.

По умолчанию, функция перемещает вложение в корзину, если она доступна для данного типа вложений. Если вы хотите удалить вложение без перемещения в корзину, установите параметр $force_delete в значение true.

Как принудительно удалить вложение, игнорируя корзину?

Для принудительного удаления вложения, игнорируя корзину, используйте функцию wp_delete_attachment() с параметром $force_delete равным true.


$attachment_id = 123; // ID вложения, которое нужно удалить
$force_delete = true; // принудительное удаление без перемещения в корзину
$result = wp_delete_attachment( $attachment_id, $force_delete );
if ( $result === false ) {
    echo 'Не удалось удалить вложение.';
} elseif ( $result === null ) {
    echo 'Вложение не найдено.';
} else {
    echo 'Вложение успешно удалено.';
}

Как получить данные удаленного вложения?

После удаления вложения с помощью функции wp_delete_attachment(), вы можете получить данные удаленного вложения с помощью функции get_post(). Она принимает идентификатор вложения в качестве параметра и возвращает объект WP_Post с данными удаленного вложения.


$attachment_id = 123; // ID удаленного вложения
$deleted_attachment = get_post( $attachment_id );
if ( $deleted_attachment instanceof WP_Post ) {
    echo 'ID: ' . $deleted_attachment->ID;
    echo 'Заголовок: ' . $deleted_attachment->post_title;
    echo 'Содержимое: ' . $deleted_attachment->post_content;
} else {
    echo 'Вложение не найдено.';
}

Как проверить успешное удаление вложения?

Для проверки успешного удаления вложения с помощью функции wp_delete_attachment() можно использовать возвращаемое значение функции. Если удаление прошло успешно, функция вернет объект WP_Post с данными удаленного вложения. В случае ошибки или неудачного удаления, функция вернет false или null.


$attachment_id = 123; // ID вложения, которое нужно удалить
$result = wp_delete_attachment( $attachment_id );
if ( $result instanceof WP_Post ) {
    echo 'Вложение успешно удалено.';
} else {
    echo 'Не удалось удалить вложение.';
}

Как удалить все вложения, принадлежащие определенному посту?

Для удаления всех вложений, принадлежащих определенному посту, можно использовать функцию wp_delete_attachment() в цикле для каждого вложения. Необходимо передать ID поста и установить параметр $force_delete в значение true, чтобы пропустить корзину и немедленно удалить вложения.


$post_id = 456; // ID поста, вложения которого нужно удалить
$attachments = get_attached_media( '', $post_id );
foreach ( $attachments as $attachment ) {
    wp_delete_attachment( $attachment->ID, true );
}

Как удалить все вложения, принадлежащие определенной категории?

Для удаления всех вложений, принадлежащих определенной категории, можно использовать функцию wp_delete_attachment() в цикле для каждого вложения. Необходимо получить все вложения, принадлежащие категории, и передать их ID в функцию для удаления.


$category_id = 789; // ID категории, вложения из которой нужно удалить
$args = array(
    'category' => $category_id,
    'post_type' => 'attachment',
    'posts_per_page' => -1,
);
$attachments = get_posts( $args );
foreach ( $attachments as $attachment ) {
    wp_delete_attachment( $attachment->ID );
}

Как удалить все вложения, загруженные определенным пользователем?

Для удаления всех вложений, загруженных определенным пользователем, можно использовать функцию wp_delete_attachment(). Эта функция позволяет переместить вложение в корзину или удалить его навсегда.

Для удаления вложений, загруженных определенным пользователем, необходимо выполнить следующие шаги:

  1. Получить список всех вложений, загруженных указанным пользователем, с помощью функции get_posts().
  2. Пройтись по полученному списку вложений и для каждого вложения вызвать функцию wp_delete_attachment() с указанием ID вложения и параметра $force_delete в значении true.

Пример кода:


$attachments = get_posts( array(
  'post_type'      => 'attachment',
  'author'         => $user_id,
  'posts_per_page' => -1,
) );
foreach ( $attachments as $attachment ) {
  wp_delete_attachment( $attachment->ID, true );
}

Как удалить все вложения, загруженные до определенной даты?

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

Для удаления вложений, загруженных до определенной даты, необходимо выполнить следующие шаги:

  1. Получить список всех вложений с помощью функции get_posts().
  2. Пройтись по полученному списку вложений и для каждого вложения проверить дату его загрузки. Если дата загрузки меньше указанной даты, вызвать функцию wp_delete_attachment() с указанием ID вложения и параметра $force_delete в значении true.

Пример кода:


$attachments = get_posts( array(
  'post_type'      => 'attachment',
  'posts_per_page' => -1,
) );
$target_date = '2022-01-01';
foreach ( $attachments as $attachment ) {
  $attachment_date = $attachment->post_date;
  if ( strtotime( $attachment_date ) < strtotime( $target_date ) ) {
    wp_delete_attachment( $attachment->ID, true );
  }
}

Как удалить все вложения, загруженные после определенной даты?

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

Для удаления вложений, загруженных после определенной даты, необходимо выполнить следующие шаги:

  1. Получить список всех вложений с помощью функции get_posts().
  2. Пройтись по полученному списку вложений и для каждого вложения проверить дату его загрузки. Если дата загрузки больше указанной даты, вызвать функцию wp_delete_attachment() с указанием ID вложения и параметра $force_delete в значении true.

Пример кода:


$attachments = get_posts( array(
  'post_type'      => 'attachment',
  'posts_per_page' => -1,
) );
$target_date = '2022-01-01';
foreach ( $attachments as $attachment ) {
  $attachment_date = $attachment->post_date;
  if ( strtotime( $attachment_date ) > strtotime( $target_date ) ) {
    wp_delete_attachment( $attachment->ID, true );
  }
}

Функция wp_delete_attachment() позволяет удалить вложение в WordPress. Она может переместить вложение в корзину или удалить его навсегда. Для удаления всех вложений, загруженных определенным пользователем или до/после определенной даты, можно использовать эту функцию в сочетании с другими функциями, такими как get_posts() и strtotime().

Связанные элементы

  • Функция wp_get_attachment_url(): возвращает URL вложения.
  • Функция wp_get_attachment_image(): возвращает HTML-код изображения вложения.
  • Функция wp_get_attachment_metadata(): возвращает метаданные вложения.
  • Функция wp_get_attachment_thumb_file(): возвращает путь к файлу миниатюры вложения.
  • Функция wp_get_attachment_thumb_url(): возвращает URL миниатюры вложения.
  • Функция wp_update_attachment_metadata(): обновляет метаданные вложения.
  • Хук delete_attachment: вызывается перед удалением вложения.
  • Хук delete_post: вызывается перед удалением вложения или перемещением его в корзину.
  • Хук deleted_post: вызывается после удаления вложения или перемещения его в корзину.
Обсуждение