WP Manifestindependent plugin directory
manifest / media / next-wp-media-reclassification

NExT WP Media Reclassification

メディアファイルを年/月のフォルダ構造に再分類します

★ 4stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/atsushia/next-wp-media-reclassification/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WordPressメディアライブラリのファイルを年/月のフォルダ構造に再分類するプラグインです。

概要

WordPress の「メディアファイルを年月ベースのフォルダーに整理」設定が無効になっている状態でアップロードされたメディアファイルを、後から年/月のフォルダ構造に整理し直すことができます。

主な機能

  • メディアファイルを年/月フォルダに自動移動
  • データベース情報の自動更新
  • 投稿・固定ページ内のメディアパスの自動更新
  • サムネイル画像も一緒に移動
  • ドライラン(テスト実行)モード
  • バッチ処理による大量ファイルの対応
  • 処理ログのファイル出力機能(エラー調査・トラブルシューティング用)
  • ログファイルの管理機能(一覧表示、ダウンロード、削除)
  • WP-CLI対応

インストール

  1. このプラグインを /wp-content/plugins/wp-media-reclassification/ ディレクトリにアップロード
  2. WordPress管理画面の「プラグイン」メニューからプラグインを有効化
  3. 「ツール」→「メディア再分類」で管理画面にアクセス

使い方

管理画面から実行

  1. WordPress管理画面の「ツール」→「メディア再分類」にアクセス
  2. 必要に応じて処理オプションを設定
    • ドライラン: 実際に移動せずにテスト実行
    • バッチサイズ: 一度に処理する件数(デフォルト: 50件)
    • 日付範囲: 特定期間のメディアのみ処理
    • ログ出力: 処理ログをファイルに出力(エラー調査に有用)
    • エラーのみログ出力: エラーと警告のみをログに記録(ログファイルサイズを削減)
  3. 「対象件数を確認」ボタンをクリック
  4. 「処理を開始」ボタンをクリックして実行
  5. 処理完了後、ログファイル情報が表示されます(ログ出力を有効にした場合)

WP-CLIから実行

# ドライラン(テスト実行)
wp media reclassify --dry-run

# 50件のメディアを処理
wp media reclassify --batch-size=50

# 特定期間のメディアを処理
wp media reclassify --date-from=2023-01-01 --date-to=2023-12-31

# すべてのメディアを処理
wp media reclassify --all

# ログ出力を有効にして処理
wp media reclassify --all --log

# ログファイル名を指定
wp media reclassify --log --log-file=my-reclassification.log

# エラーのみログに記録
wp media reclassify --all --log --error-only

WP-CLIコマンドオプション

  • --dry-run: ドライランモード(実際にファイルを移動しない)
  • --batch-size=<数値>: バッチサイズ(デフォルト: 50)
  • --date-from=<日付>: 開始日(YYYY-MM-DD形式)
  • --date-to=<日付>: 終了日(YYYY-MM-DD形式)
  • --all: すべてのメディアを処理
  • --log: 処理ログをファイルに出力
  • --log-file=<ファイル名>: ログファイル名を指定(デフォルト: reclassification-YYYY-MM-DD_HH-MM-SS.log)
  • --error-only: エラーと警告のみをログに記録(ログファイルサイズを削減)

注意事項

実行前に必ず行うこと

  1. データベースのバックアップ
  2. メディアファイルのバックアップ
  3. ドライランでのテスト実行

その他の注意点

  • 処理中はサイトのバックアップを取らないでください
  • 大量のファイルを処理する場合はWP-CLIの使用を推奨します
  • 既に年/月フォルダにあるファイルは自動的にスキップされます
  • ファイル名が重複する場合は連番が付加されます

処理内容の詳細

このプラグインは以下の処理を実行します:

  1. メディアファイルの移動

    • 元ファイルをuploads/年/月/フォルダに移動
    • サムネイル画像も同じフォルダに移動
  2. データベースの更新

    • _wp_attached_fileメタデータを更新
    • _wp_attachment_metadataメタデータを更新
  3. コンテンツの更新

    • 投稿本文(post_content)内のURLを更新
    • 固定ページ本文内のURLを更新
    • カスタムフィールド(post_meta)内のURLを更新

ログ機能

ログファイルの出力

処理ログをファイルに出力することで、エラーの詳細調査やトラブルシューティングが可能です。

  • 保存場所: wp-content/uploads/wp-media-reclassification-logs/
  • ファイル名: reclassification-YYYY-MM-DD_HH-MM-SS.log(カスタマイズ可能)
  • セキュリティ: .htaccessで直接アクセスを制限
  • ログレベル: ERROR(エラー)、WARNING(警告)、INFO(情報)、SUCCESS(成功)
  • エラーのみモード: エラーと警告のみを記録してログファイルサイズを削減可能

ログに記録される情報

  • 添付ファイルが見つからない場合
  • ファイルが存在しない場合
  • 既に正しいフォルダにある場合(スキップ)
  • ディレクトリ作成失敗
  • ファイル移動失敗
  • データベース更新失敗
  • 処理成功(ファイルパス、移動元、移動先)

ログファイルの管理

管理画面の「ログファイル一覧」セクションで以下の操作が可能です:

  • ログファイル一覧の表示(ファイル名、サイズ、最終更新日時)
  • ログファイルのダウンロード
  • 個別ログファイルの削除
  • 30日以上前のログファイルを一括削除

エラーハンドリング

  • ファイル移動に失敗した場合はログに記録し、次のファイルに進みます
  • データベース更新に失敗した場合もログに記録されます
  • 管理画面では処理結果とエラーリストが表示されます
  • ログ出力を有効にすると、詳細なエラー情報がファイルに記録されます

システム要件

  • WordPress 5.0以上
  • PHP 7.4以上
  • WP-CLI(コマンドライン実行時)

ライセンス

GPL v2 or later

変更履歴

1.1.0

  • セキュリティ修正: $_POST/$_GET 処理に wp_unslash() を追加
  • セキュリティ修正: バッチサイズのサーバーサイドバリデーション追加(1〜500)
  • セキュリティ修正: 日付フォーマットのサーバーサイドバリデーション追加
  • セキュリティ修正: ログファイルダウンロード時の Content-Disposition ヘッダーを rawurlencode() でエンコード
  • セキュリティ修正: rename() のエラー抑制演算子(@)を除去
  • uninstall.php を追加してプラグイン削除時のクリーンアップを実装

1.0.0

  • 初回リリース
  • 基本的なメディア再分類機能
  • 管理画面UI
  • WP-CLIコマンド
  • ドライランモード
  • バッチ処理
  • 処理ログのファイル出力機能
  • ログファイルの管理機能(一覧、ダウンロード、削除)

サポート

問題が発生した場合は、以下を確認してください:

  1. WordPressとPHPのバージョンが要件を満たしているか
  2. ファイルとディレクトリの書き込み権限が適切か
  3. ドライランモードでエラーが出ないか
  4. ログ出力を有効にして詳細なエラー情報を確認

開発者向け情報

ディレクトリ構成

wp-media-reclassification/
├── wp-media-reclassification.php (メインファイル)
├── includes/
│   ├── class-logger.php (ログ出力)
│   ├── class-media-reclassifier.php (コア処理)
│   ├── class-admin-page.php (管理画面)
│   └── class-wp-cli-command.php (WP-CLI)
├── assets/
│   ├── js/
│   │   └── admin.js
│   └── css/
│       └── admin.css
├── spec.md (仕様書)
└── README.md

フィルターフック

現在、カスタムフィルターフックは提供していません。将来のバージョンで追加予定です。

貢献

バグ報告や機能リクエストは、GitHubのIssuesでお願いします。