Мы создали пользовательский тип сообщения, который позволяет нашему клиенту загружать файлы в папку вне стандартной папки для загрузки Wordpress (wp-content/upload-assets). Эти файлы должны обрабатываться отдельно от стандартной папки wp-content/uploads, поэтому мы НЕ МОЖЕМ использовать
define( 'UPLOADS', 'mycustomfolder' );
в wp-config.php.
Вместо этого мы используем это, чтобы временно изменить папку uploads на wp-content/upload-assets:
add_filter('upload_dir', 'my_upload_dir');
$uploaded_file = wp_handle_upload($_FILES['xxxx_image'], $upload_overrides);
remove_filter('upload_dir', 'my_upload_dir');
Мы используем это, чтобы удалить все вложения из определенного сообщения:
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 также должен удалить все связанные файлы с диска, но он не работает, потому что наши файлы находятся в нашей настраиваемой папке (wp-content/upload-assets).
Вот код нашей функции 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;
}
Как заставить wp_delete_attachment удалять файлы в нашей пользовательской папке wp-content/upload-assets?