web-dev-qa-db-ja.com

Wp-config.phpを変更したりメディア設定を変更せずにカスタムフォルダの下にメディアファイルを保存する方法

画像を一意のフォルダにアップロードしたい。次に、サーバーに保存されているこの画像のパスを取得します。

http://example.com/wp-content/uploads/myimages/image1.jpg

今、私はURLとしてカスタムフィールドを持つ投稿にこのURLを保存したいです。

対応する画像を置き換えるのと同様に定期的に投稿を上書きするので、以前の投稿(削除された投稿)に関連する画像を自分のサーバーに残したくありません(そうでないとサーバーのメモリが増えます)。 myimagesフォルダからすべての画像を削除したいです。アップロード用のデフォルトパスを変更したくありません。これが私の投稿作成​​用のコードです。

$new_post = array(
'post_title' => $phototitle,
'post_status' => 'publish',
'post_author' => 1,
'post_type' => 'post',
'post_category' => array(328)
);

$postid=wp_insert_post($new_post);
update_field('field_521c73f75a652',$photoid,$postid);
update_field('field_521c74a65a653',$phototitle,$postid);
update_field('field_521c74b25a654',$photourl,$postid);
update_field('field_521c74be5a655',$details,$postid);
update_field('field_521c77e72f9a6',$countinarr,$postid);

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');
$image = media_sideload_image($photourl, $postid, $phototitle);

$path = (string)$image;
$arr = (explode("'",$path));
$url = $arr[1];

update_field('field_521c758095f55',$url,$postid);

wp-config.phpやメディア設定を変更せずにこのアップロードパスを変更する方法を教えてください。

1
Akshay

これはアップロードごとにあなた自身のサブディレクトリを作成する簡単な関数です。

function kv_custom_image_dir( $pathdata ) {
    $subdir = '/uploads_img'.$pathdata['subdir'];
    $pathdata['path'] = str_replace($pathdata['subdir'], $subdir, $pathdata['path']);
    $pathdata['url'] = str_replace($pathdata['subdir'], $subdir, $pathdata['url']);
    $pathdata['subdir'] = str_replace($pathdata['subdir'], $subdir, $pathdata['subdir']);
    return $pathdata;
}
add_filter( 'upload_dir', 'kv_custom_image_dir' );

上記のコードから、imagesフォルダをuploads_imgに変更しました。自分のものも同様に変更できます。

あなたがより多くの情報が欲しいならば、私はあらゆるカスタムアップロードのためにアップロードディレクトリを変えるためのチュートリアルを書きました、 私のブログ を見てください:

2
varadha

Notice:以下に示す私のアイデアやコードをテストしていません。

* media_sideload_image *は* wp_handle_upload *関数を呼び出します。驚くべきことに、ファイルのアップロードを処理します。

アップロードディレクトリは* wp_upload_dir *関数で設定されます。この関数はその出力を修正するために使うことができるフィルターを持っています( http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/functions.php#L1607 を見てください):

$uploads = apply_filters( 'upload_dir',
array(
    'path'    => $dir,
    'url'     => $url,
    'subdir'  => $subdir,
    'basedir' => $basedir,
    'baseurl' => $baseurl,
    'error'   => false,
) );

だから、そのフィルタにフックする:

add_filter( 'upload_dir', 'my_upload_dir_function' );

function my_upload_dir_function( $uploads ){
    if( isset( $_POST['my_check_post_var'] ) && $_POST['my_check_post_var'] == 'my_check_var_value' ){
        return array(
            'path'    => $dir, //have to be set
            'url'     => $url, //have to be set
            'subdir'  => $subdir, //have to be set
            'basedir' => $basedir, //have to be set
            'baseurl' => $baseurl, //have to be set
            'error'   => false,
        );
    }else{
        return $uploads;
    }
}

あなたのフィルタにチェックインすると、特定の値を持つチェック変数をセットする隠しフィールドがあなたのコードの中にあることがコードの圧力です。その$ _POST変数が存在しないか異なる値を持っているなら、あなたはオリジナルの配列を返します - したがって、あなたは標準的な画像アップロードを中断することはありません。

そしてもちろん、フィルタで使用されるすべての変数を作成する必要があります。 $ dir、$ urlなど。 http://core.trac.wordpress.org/browser/tags/3.6/wp-includes/functions.php#L1525 をチェックして、どうすればいいのか考えてくださいWPこれを行います。

0
david.binda