wp_delete_attachment()
Видаляє вкладення WordPress (файл медіатеки, прикріплений файл). Файл видаляється фізично.
Ця функція робить те саме, як якщо б ви зайшли в Медіатеку і видалили картинку (вкладення).
Ця функція не перевіряє чи використовуються видалені вкладення на сайті (десь у контенті). Так, якщо видалити вкладення, а воно використовується в контенті запису, то посилання на цю картинку стане битим у контенті запису.
Видаляє:
- Запис із таблиці wp_posts .
- Пов’язані метадані.
- Зв’язки з таксономіями (рубриками, мітками, довільними таксами) (якщо вони є).
- Пов’язані коментарі (якщо вони є).
- Файли, пов’язані з вкладенням (оригінал, мініатюри).
wp_delete_attachment_files()
Хуки з функції
Повертає
WP_Post|false|null
. false при невдалому видаленні. Ці вкладення видаляються.
Перевірку потрібно проводити за допомогою оператора порівняння ===
, а не ==
, тому що функція може повернути 0 або порожній масив у разі успішного видалення.
Використання
wp_delete_attachment($attachment_id, $force_delete);
-
$attachment_id
(число) (обов’язковий) - ID вкладення, яке потрібно видалити.
-
$force_delete
(логічний) true – безповоротне видалення повз кошик, якщо включений кошик.
При
$force_delete = false
– вкладення переміщаються в кошик, хоча за замовчуванням в медіатеці немає кнопки для доступу до кошика – це може спантеличити. Також, файли вкладень (фізичні файлиwp-content/uploads
) зберігаються як є.При
$force_delete = true
– файли вкладень (фізичні файли вwp-content/uploads
) будуть видалені.Типово: false
Приклади
#1 Видалення вкладення
Безповоротно видалимо вкладення з ID 54:
wp_delete_attachment(54, true);
#2 Видалимо всі вкладення посту (прикріплені файли), разом із видаленням запису
На деяких блогах зручно зробити так, щоб при видаленні запису (поста) разом з нею видалялися б і всі прикріплені до неї медіафайли. Зробити це можна так:
## Видаляє всі вкладення запису (прикріплені медіафайли) запису разом із записом (постом) add_action( 'before_delete_post', 'delete_attachments_with_post' ); function delete_attachments_with_post( $postid ){ $post = get_post($postid); // Перевіримо тип запису для яких потрібно видаляти вкладення if( in_array($post->post_type, ['article','question']) ){ $attachments = get_children( array( 'post_type'=>'attachment', 'post_parent'=>$postid ) ); if( $attachments ){ foreach( $attachments as $attachment ) wp_delete_attachment( $attachment->ID ); } } }
Вішаємо на хук before_delete_post
, оскільки при видаленні посту, всі вкладення набувають статусу не прикріплені, тобто. значення post_parent видаляється, а ними йде відбір вкладень посту. Значить, хуки delete_post
і after_delete_post
не підійдуть.
#3 Видалення медіафайлу з перевіркою
Видалимо вкладення і перевіримо, чи дійсно вказаний медіафайл був видалений:
if( false === wp_delete_attachment( 54, true ) ){ echo "Не вдалося видалити медіа файл"; } else { echo "Медіа файл видалено"; }
нотатки
- Global. wpdb. $wpdb WordPress database abstraction object.
список змін
З версії 2.0.0 | Введено. |