Lassen Sie WordPress wp_delete_attachment Dateien aus einem vordefinierten benutzerdefinierten Ordner löschen

Lesezeit: 2 Minuten

Benutzeravatar von Richard Tinkler
Richard Tinker

Wir haben einen benutzerdefinierten Beitragstyp erstellt, der es unserem Kunden ermöglicht, Dateien in einen Ordner außerhalb des Standard-Wordpress-Upload-Ordners (wp-content/upload-assets) hochzuladen. Diese Dateien sind getrennt vom Standardordner wp-content/uploads zu behandeln und können daher NICHT verwendet werden

define( 'UPLOADS', 'mycustomfolder' );

in der wp-config.php.

Stattdessen verwenden wir dies, um den Uploads-Ordner vorübergehend in wp-content/upload-assets zu ändern:

add_filter('upload_dir', 'my_upload_dir');
$uploaded_file = wp_handle_upload($_FILES['xxxx_image'], $upload_overrides);
remove_filter('upload_dir', 'my_upload_dir');

Wir verwenden dies, um alle Anhänge von einem bestimmten Beitrag zu entfernen:

add_filter('upload_dir', 'my_upload_dir');
$attachments = get_posts( array(
            'post_type'      => 'attachment',
            'posts_per_page' => -1,
            'post_status'    => 'any',
            'post_parent'    => $pid
) );

foreach ( $attachments as $attachment ) {
   if ( false === wp_delete_attachment( $attachment->ID, true ) ) {
      echo 'Attachment could not be deleted.';
   }
}
remove_filter('upload_dir', 'my_upload_dir');

wp_delete_attachment sollte auch alle zugehörigen Dateien von der Festplatte löschen, aber es funktioniert nicht, weil sich unsere Dateien in unserem benutzerdefinierten Ordner (wp-content/upload-assets) befinden.

Hier ist der Code für unsere Funktion my_upload_dir:

function my_upload_dir($upload) {
    $upload['subdir']   = '';
    $upload['basedir']  = WP_CONTENT_DIR;
    $upload['baseurl']  = WP_CONTENT_URL;
    $upload['path']     = $upload['basedir'] . '/upload-assets';
    $upload['url']      = $upload['baseurl'] . '/upload-assets';
    return $upload;
}

Wie bringen wir wp_delete_attachment dazu, die Dateien in unserem benutzerdefinierten wp-content/upload-assets-Ordner zu entfernen?

  • Sehen Sie sich zuerst die Anhänge-Anleitung an, ob sie sich tatsächlich im benutzerdefinierten Ordner befinden.

    – Stummel

    30. Juni 2016 um 10:54 Uhr

  • @Ervald – Ja. Definitiv im benutzerdefinierten Ordner!

    – Richard Tinkler

    30. Juni 2016 um 11:17 Uhr


  • Haben Sie die richtigen Berechtigungen für diesen Ordner wie der Standard?

    – Stummel

    30. Juni 2016 um 11:23 Uhr

  • @Ervald – Ja. Ich kann manuell löschen, indem ich die Verknüpfung aufhebe, damit die Berechtigungen in Ordnung sind.

    – Richard Tinkler

    30. Juni 2016 um 12:05 Uhr

  • Habe das gleiche Problem… Konntest du eine Lösung finden?

    – Swen

    11. Januar 2018 um 11:44 Uhr

Benutzeravatar von Deepti chipdey
Deepti-Chipdey

Hallo. Sie können dies tun, wenn Sie die Datei löschen möchten, aber es werden nicht alle Post-Metafelder, Taxonomie, Kommentare usw. entfernt, die mit dem Anhang verbunden sind.

Ich hoffe das hilft

foreach ( $attachments as $attachment ) {
  if ( false === wp_delete_attachment( $attachment->ID, true ) ) {
    $file = get_attached_file( $attachment->ID );
    $file = str_replace( "uploads", "upload-assets", $file);
     wp_delete_file( $file );
   }
 }

Ich habe diesen Code nicht getestet, aber ich hoffe, er sollte funktionieren

Um im Bereich der aktuellen Frage zu bleiben, können Sie den Filter “get_attached_file” verwenden, um die Dateipfadzeichenfolge direkt zu ändern, die zum Abrufen des Pfads der zu löschenden Datei verwendet wird. Fügen Sie diese Funktion speziell zu Ihrer functions.php hinzu

function sr_update_uploads_directory( $file )
{
    return str_replace( "uploads", "upload-assets", $file) // Change path to upload-assets from uploads
}
add_filter( 'get_attached_file', 'sr_update_uploads_directory' );

Habe derzeit keine Zeit zum Testen. Entschuldigen Sie das bitte. Ich hoffe es hilft. 🙂

1403850cookie-checkLassen Sie WordPress wp_delete_attachment Dateien aus einem vordefinierten benutzerdefinierten Ordner löschen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy