画像を年月フォルダでなく、カテゴリ別フォルダで管理する方法

0
1258
views

WoredPress のデフォルト設定では、記事にアップロードした画像は年月別のフォルダで管理されます。これをカテゴリ別フォルダで管理する方法に変えてみます。プラグインを使う方法です。

メディア設定の変更

WordPress の管理画面のサイドメニュー、「設定」から「メディア」を選んでメディアの設定画面に行きます。

そうするとメディア設定の中に「ファイルアップロード」という項目があります。

アップロードするディレクトリの設定画面

デフォルトではここの設定で「アップロードしたファイルを年月ベースのフォルダに整理」のチェックボックスにチェックが入っています。

つまり、その状態だとアップロードファイルが年月別フォルダに格納されるわけです。

年月別フォルダの階層構造

今回はカテゴリ別フォルダに格納する方式に変えたいので、ここのチェックボックスのチェックを外しておきます。

チェックを外したら「変更を保存」ボタンを押して、変更を確定させます。

Custom Upload Dir のインストール

次に格納フォルダを自由に指定できるようにするプラグイン、Custom Upload Dir(カスタムアップロードディル)をインストールします。

Custom Upload Dir:
https://ja.wordpress.org/plugins/custom-upload-dir/

Custom Upload Dir の設定

インストールしてプラグインを有効化すると、管理画面のサイドバーメニューの「設定」欄のサブメニューに「Custom Upload Dir」が新たに加わっています。ここから Custom Upload Dir の設定画面に行きます。

サイドメニュー内の Custom Upload Dir へのリンク

パスの指定

設定画面には、Build a path template という入力エリアがあり、ここにフォルダのパスを設定することで、アップロードファイルの格納先を自由に指定することができます。

フォルダのパス設定エリア

パスの設定次第で格納フォルダの指定は様々なバリエーションで選択できますが、そのうち今回は次のようなパスを指定しました。

/img/%post_type%/%category%/%post_id%/

%post_type% には通常の投稿なら post が、カスタム投稿タイプなら flower など投稿タイプで設定したスラッグが割り当てられます。

%category% には通常の投稿なら記事で設定したカテゴリが、カスタム投稿タイプなら通常はなし。%post_id% には WordPress が機械的に採番した ID番号が割り当てられます。

管理画面の記事一覧に投稿 ID を表示させる方法
http://example.com/

その他にも利用できるタグはたくさん用意されています。プロジェクトごとの目的に合わせて設計したいフォルダ構造になるよう、これらのタグを組み合わせていきます。

フォルダのパス設定エリアに入力できるタグ

年月別フォルダへの設定

パスの指定の次に「Organize my uploads into month- and year-based folders」というメッセージとともにチェックボックスがあります。

ここにチェックを入れると、年月別フォルダにアップロードファイルを格納します。そうしたくない場合は、ここのチェックを外します。

階層構造の反映

次に行くと Settings for taxonomy hierarchies: というところに設定項目が並んでいます。

タクソノミ階層の設定欄

項目:Always get all parents

Always get all parents 「常にすべての親を含める」にチェックを入れると、カテゴリやタクソノミの親子階層が、格納フォルダにそのままの構造で反映されます。

項目:Flat filesystem

Flat filesystem (no subfolders for children) 「フラットファイルシステム(子にサブフォルダを作らない)」にチェックを入れると、親子階層構造を1つの名前につなげた1つのフォルダにファイルが格納されます。

投稿のカテゴリ構造が /animal/cat/mikeneko という構造であったなら、格納先フォルダの名前が /animal-cat-mikeneko になります。

項目:Ignore parents

Ignore parents (use only leaf node of hierarcy) 「親を除く(最下層だけを使う)」にチェックを入れると、格納先フォルダが最下層の名前、先の例でいえば /mikeneko フォルダに格納されます。

項目:Ignore children

Ignore children (use only the root of hierarchy) 「子を除く(階層のルートだけを使う)」にチェックを入れると、格納先フォルダが最上位層の名前、先の例でいえば /animal フォルダに格納されます。

設定を確定させるには、画面一番下にある「Update Settings」ボタンを押してます。

「設定を保存する」ボタン

できあがったフォルダ構造

指定したフォルダ階層は、/wordpress/wp-content/uploads 内に形成されます。

エクスプローラでアップロードフォルダの構造を表示

今回設定したパスでプラグインを運用し、記事に画像をアップロードしていくことで、uploads フォルダには次のような階層が出来上がります。

flower は「花図鑑」というカスタム投稿タイプで、animal は動物カテゴリ、dog、cat はその下位階層の犬、猫カテゴリです。

.uploads
└─img
    ├─flower
    │  ├─5
    │  │      tulip-eye-catch.png
    │  │      tulip-closeup.png
    │  │
    │  └─15
    │           freesia-eye-catch.png
    │           freesia.png
    └─post
        └─animal
            ├─dog
            │  └─28
            │          bulldog-eye-catch.png
            └─cat
                └─35
                         cat-eye-catch.png
                         baby-cat.png

カテゴリ別で画像を管理するデメリット

カテゴリ別でフォルダを分けておくと、その後の管理はしやすいです。

しかし、カテゴリ別で画像を管理していくことには1つ問題点があります。それは変更に弱いことです。

変更に弱い

特に、見込みが甘いままサイトの設計を行ってどんどん記事を投入していくと、カテゴリの名前を変えたくなったり、カテゴリの階層構造を変えたくなったりした時。そういう場合に、変更への弱さが明確になります。

dog を inu に変更する例

例えば「犬」というカテゴリのスラッグが dog だったのを inu に変更したとしましょう。

次から犬カテゴリに投稿した記事の画像は、inu フォルダに格納されます。それまでの犬の記事画像は dog フォルダに残ったままです。

.uploads
└─img
    ├─flower
    │  ├─5
    │  │      tulip-eye-catch.png
    │  │      tulip-closeup.png
    │  │
    │  └─15
    │           freesia-eye-catch.png
    │           freesia.png
    └─post
        └─animal
            ├─dog
            │  └─28
            │          bulldog-eye-catch.png
            ├─inu
            │  └─45
            │          akita-dog-eye-catch.png
            └─cat
                └─35
                         cat-eye-catch.png
                         baby-cat.png

これを inu フォルダに1本化しようと思うと、データベースの修正を行い新しいフォルダへの画像の移し替えを行わなければなりません。

カテゴリ別で画像ファイルを整理する方法をサイトに導入

新規カテゴリを付与する変更

現実的な問題でいうと、カテゴリ丸ごとの変更はそこまで大変な作業にはなりません。大変になるのは、カテゴリ内の特定のグループに新規カテゴリを付与する変更を行った場合です。

そうしたことを手作業で行おうとすれば、間違いも起きやすいですし、それ以前に大変な労力が掛かります。これが変更に弱い理由です。

画像を年月別で管理するか、カテゴリ別で管理するかは、このようなメリット/デメリットを踏まえた上で、全体最適化の視点で選択する必要があります。