web-dev-qa-db-ja.com

カスタム投稿タイプ専用のカスタムアップロードパスを設定しますか?

私は「クライアント」のカスタム投稿タイプを持っていて、これらの投稿のために管理者を通してアップロードされたすべての画像/ファイルが私のサーバーの特定のディレクトリに行くことを望みます。これはおそらくwp_upload_dirを使用して可能ですか?

3
Xav

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の仕事で毎晩出かけます。

4
Chris_O

これはかなりうまくいきます:

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;
        }
0
kakoma

このような何かがトリックをするかもしれません、あなたが好きなようにちょうど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;
}
0
gonzalezea