php wordpress delete-file

php - Hacer que Wordpress wp_delete_attachment elimine archivos de una carpeta personalizada predefinida



delete-file (2)

Hola. Puede hacerlo de esta manera si desea eliminar el archivo, pero no eliminará todos los campos de metadatos, taxonomía, comentarios, etc. asociados con el adjunto.

Espero que esto ayude

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 ); } }

No he probado este código, pero espero que funcione

Hemos creado un tipo de publicación personalizada que le permite a nuestro cliente cargar archivos en una carpeta fuera de la carpeta estándar de cargas de Wordpress (wp-content / upload-asset). Estos archivos deben manejarse por separado de la carpeta estándar de wp-content / uploads y por eso no podemos usar

define( ''UPLOADS'', ''mycustomfolder'' );

en el wp-config.php.

En su lugar, utilizamos esto para cambiar temporalmente la carpeta de cargas a wp-content / upload-asset:

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

Estamos usando esto para eliminar todos los archivos adjuntos de una publicación en particular:

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 también debe eliminar todos los archivos asociados del disco, pero no funciona porque nuestros archivos están en nuestra carpeta personalizada (wp-content / upload-asset).

Aquí está el código para nuestra función 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; }

¿Cómo hacemos que wp_delete_attachment elimine los archivos en nuestra carpeta personalizada wp-content / upload-asset?


Manteniéndose en el dominio de la pregunta actual, puede usar el filtro "get_attached_file" para alterar directamente la cadena de la ruta del archivo que se usa para tomar la ruta del archivo que se va a eliminar. Específicamente agrega esta función a tus funciones.php

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'' );

No tengo tiempo para hacer pruebas actualmente. Así que, por favor discúlpame por eso. Espero eso ayude. :)