I have a custom post type of ‘clients’ and would like all images/files uploaded through the admin for these posts to go to a specific directory on my server, but everything else to stay as normal. Is this possible maybe using wp_upload_dir?
3 Answers
You can add a filter to upload_dir. Here is a simple class I wrote to do this for a project. Use the protected $filter_path
variable to define the alternate uploads directory (*will be relative to wp-content/uploads)
class UGC_Attachment {
protected $upload_dir;
protected $upload_url;
protected $filter_path="/relative_path_from_wp-content/uploads";
function __construct() {
$dir = wp_upload_dir();
$this->upload_dir = $dir['basedir'] . $this->filter_path;
$this->upload_url = $dir['baseurl'] . $this->filter_path;
}
function upload_dir_filter( $upload ) {
$target_path = $this->upload_dir;
$target_url = $this->upload_url;
wp_mkdir_p( $target_path );
$upload['path'] = $target_path;
$upload['url'] = $target_url;
return $upload;
}
}
Usage:
function prefix_upload_dir_filter( $post ) {
if ( 'clients' != get_post_type( $post )
return;
$filter = new UGC_Attachment();
return add_filter( 'upload_dir', array( &$filter, 'upload_dir_filter' );
}
The prefix_upload_dir_filter function would need to be attached to an action or filter with the $post object available or the $post ID. You will need to do some more research to figure this part out or maybe someone else can chime in. My usage was a complete custom image upload solution from the front end where I needed the publicly uploded images placed in a temp directory that could be cleaned out nightly via a cron job.