我们创建了一个自定义文章类型,允许客户将文件上传到标准WordPress上传文件夹(wp-content/upload-assets)之外的文件夹中。这些文件需要与标准的wp-content/uploads文件夹分开处理,这就是为什么我们不能使用
define( 'UPLOADS', 'mycustomfolder' );
在 wp-config.php 文件中。
相反,我们使用这个方法暂时将上传文件夹更改为 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文件夹中的文件?