web-dev-qa-db-ja.com

Wordpressネットワークでアップロードされたすべての画像を保存するために同じディレクトリを使用する

私は現在Wordpressネットワークを使用して、同じテンプレート、プラグイン、および画像を使用している多数のサイトを運営しています。投稿が複数のサイトに表示される場合は、複数の場所ではなく、1つの場所に画像をアップロードする(および1つの画像のコピーを保存する)のが合理的です。

カスタム書き換えを作成することでこれを達成できますか。それとも、これを達成するためのより良い方法はありますか?

背景情報

私はWPThree Broadcastを使用して、複数のサイトに画像を「ブロードキャスト」し、その画像をそれぞれの画像ライブラリにコピーします。私はサーバーが同じイメージの10個のコピーで雑然としたくないので、代わりにそのイメージが既にサイトのwp_postsテーブルにあるかどうか、そしてpostpost_metaデータをそのサイトのテーブルにコピーしていないかどうか確認します。

しかし、デフォルトのWPが設定されているので(例えば/wp-content/blogs.dir/2/files/に)、私はnot実際の画像を新しいアップロードフォルダにコピーしたいと思います。標準のWPインストール用のデフォルトアップロードフォルダである/wp-content/uploads/にアップロードできます。

5
Ollie

これをアーカイブするためのアクションを追加するのはとても簡単です。

function wpse_16722_main_uploads() {
    switch_to_blog(1);
}
add_action('load-media-new.php', 'wpse_16722_main_uploads');
add_action('load-media-upload.php', 'wpse_16722_main_uploads');
add_action('load-media.php', 'wpse_16722_main_uploads');
add_action('load-upload.php', 'wpse_16722_main_uploads');
add_action('admin_init', 'wpse_16722_main_uploads');

これは現在のサブブログを switch_to_blog の助けを借りてあなたのメインサイトを使用するように変更します、そしてもちろんあなたはid 1によってメインサイドが欲しいです。

アップロードフォルダをサブディレクトリなしの/ uploadsに書き換える機能を追加することもできます。

function wpse_16722_upload_dir( $args ) {
    $newdir = '/';

    $args['path']    = str_replace( $args['subdir'], '', $args['path'] ); //remove default subdir
    $args['url']     = str_replace( $args['subdir'], '', $args['url'] );      
    $args['subdir']  = $newdir;
    $args['path']   .= $newdir; 
    $args['url']    .= $newdir; 

    return $args;
}
add_filter( 'upload_dir', 'wpse_16722_upload_dir' );
4

編集スタッフによる投稿 "WordPress 3.5でデフォルトのメディアアップロード場所を変更する方法" では、彼らはwp-config.phpのアップロードディレクトリを変更する方法を示しています。

define( 'UPLOADS', 'wp-content/'.'files' );
0
James H.