私は「クライアント」のカスタム投稿タイプを持っていて、これらの投稿のために管理者を通してアップロードされたすべての画像/ファイルが私のサーバーの特定のディレクトリに行くことを望みます。これはおそらくwp_upload_dirを使用して可能ですか?
Upload_dirにフィルタを追加することができます。これは私がプロジェクトのためにこれをするために書いた簡単なクラスです。代替アップロードディレクトリを定義するにはprotected $filter_path
変数を使用します(*は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;
}
}
使用法:
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' );
}
Prefix_upload_dir_filter関数は、利用可能な$ postオブジェクトまたは$ post IDを持つアクションまたはフィルタに添付する必要があります。この部分を理解するには、もう少し調査を行う必要があります。そうでない場合は、他の人が参加する可能性があります。 cronの仕事で毎晩出かけます。
これはかなりうまくいきます:
add_filter( 'upload_dir', 'custom_prefix_upload_dir' );
function custom_prefix_upload_dir( $pathdata ) {
global $current_user,$pagenow;
if ( ( 'async-upload.php' == $pagenow || 'media-upload.php' == $pagenow ) && false !== strpos( wp_get_referer(),'post_type=clients' ) ) {
$custom_dir = '/my_custom_uploads';
if ( empty( $pathdata[ 'subdir' ] ) ) {
$pathdata[ 'path' ] = $pathdata[ 'path' ] . $custom_dir;
$pathdata[ 'url' ] = $pathdata[ 'url' ] . $custom_dir;
$pathdata[ 'subdir' ] = '/kanzu_intug';
} else {
$new_subdir = $custom_dir . $pathdata[ 'subdir' ];
$pathdata[ 'path' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'path' ] );
$pathdata[ 'url' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'url' ] );
$pathdata[ 'subdir' ] = str_replace( $pathdata[ 'subdir' ], $new_subdir, $pathdata[ 'subdir' ] );
}
}
return $pathdata;
}
このような何かがトリックをするかもしれません、あなたが好きなようにちょうどmycptを変えてください
add_filter('upload_dir', 'mycpt_uploaddir');
function mycpt_uploaddir( $param ){
global $typenow;
if ('mycpt' != $typenow)
return $param;
$mycpt = '/mycpt';
$param['path'] = $param['path'] . $mycpt;
$param['url'] = $param['url'] . $mycpt;
return $param;
}