Wordやエクセルはメタデータの宝庫だったりします。作者情報や制作日を平気で掲載します。とはいえMicrosoftの仕様なので仕方がないのですが、私にとってはどうも許せない仕様になります。ので消しましょう慈悲はない(無慈悲)
実はZIP形式のWordやエクセル
拡張子上はdocxなどと名乗っていますが、内部のファイルは実はZipを圧縮したものです。その中の「core.xml, app.xml」に詳細情報が書かれています。例えば「テストファイル.docx」を作ってみます。
そしてこのファイルを「テストファイル.docx.zip」に変えて解凍します。すると、docPropsというフォルダが出てきます。この中に「app.xml」と「core.xml」というファイルが出てきます。実はこの2つが個人情報の正体です。たとえばこの core.xml をテキストエディタで開いてみると、こんな記述が目に入るかもしれません。
<dc:creator>tanaka</dc:creator><br><cp:lastModifiedBy>tanaka</cp:lastModifiedBy><br><dcterms:created xsi:type="dcterms:W3CDTF">2025-10-20T14:52:00Z</dcterms:created><br><dcterms:modified xsi:type="dcterms:W3CDTF">2025-10-20T15:03:00Z</dcterms:modified>はい、どう考えても不要な情報です。消します。無慈悲に消します。
もうプラグインで消してしまえ!(暴論)
はい、人間の手でこんなの一々消してるヒマありません。プラグインで葬りましょう。作りました。metadata-purgerです
<?php
/**
* Plugin Name: Metadata Purger for PDF & Office
* Plugin URI: https://p-fox.jp/
* Description: アップロード時にPDF, Word, Excel, PowerPointのメタデータ(作成者・会社名など)を自動削除します。REST APIアップロードも含め、ユーザー操作なしで実行されます。
* Version: 1.0.0
* Author: Red Fox (team Red Fox)
* License: GPLv2 or later
* Requires PHP: 7.4
* Requires at least: 6.0
* Text Domain: metadata-purger
*/
if ( ! defined( 'ABSPATH' ) ) exit;
/**
* =========================================================
* メイン処理:メタデータ除去
* =========================================================
*/
function mp_purge_metadata( string $file_path ): void {
$mime = mime_content_type( $file_path );
$ext = strtolower( pathinfo( $file_path, PATHINFO_EXTENSION ) );
$supported = [
'application/pdf',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/vnd.ms-powerpoint',
'application/vnd.openxmlformats-officedocument.presentationml.presentation',
];
// 対象外MIMEは除外
if ( ! in_array( $mime, $supported, true ) ) return;
// ExifTool確認
$exiftool = trim( shell_exec( 'which exiftool' ) );
if ( $exiftool ) {
@exec( escapeshellcmd( $exiftool ) . ' -all= ' . escapeshellarg( $file_path ) );
@unlink( $file_path . "_original" );
return;
}
// Office形式 → ZipArchiveで削除
if ( in_array( $ext, [ 'docx', 'xlsx', 'pptx' ], true ) ) {
$zip = new ZipArchive();
if ( $zip->open( $file_path ) === TRUE ) {
$zip->deleteName( 'docProps/core.xml' );
$zip->deleteName( 'docProps/app.xml' );
$zip->close();
return;
}
}
// PDFでExifTool非対応 → ログ出力
error_log( "[Metadata Purger] Metadata removal skipped for: {$file_path}" );
}
/**
* =========================================================
* アップロード完了後フック(通常アップロード)
* =========================================================
*/
add_filter( 'wp_handle_upload', function( array $file ): array {
mp_purge_metadata( $file['file'] );
return $file;
}, 20 );
/**
* =========================================================
* REST API 経由のアップロード処理にも対応
* =========================================================
*/
add_filter( 'rest_pre_insert_attachment', function( $prepared_post, $request ) {
if ( isset( $_FILES['file']['tmp_name'] ) ) {
mp_purge_metadata( $_FILES['file']['tmp_name'] );
}
return $prepared_post;
}, 10, 2 );
/**
* =========================================================
* 管理画面通知(ExifTool検出状況)
* =========================================================
*/
add_action( 'admin_notices', function() {
if ( ! current_user_can( 'manage_options' ) ) return;
$exiftool = trim( shell_exec( 'which exiftool' ) );
echo '<div class="notice notice-info"><p>';
if ( $exiftool ) {
echo 'Metadata Purger: ExifTool が検出されました。メタデータ削除が有効です。';
} else {
echo 'Metadata Purger: ExifTool が見つかりません。Office形式(docx/xlsx/pptx)のみZipArchiveで処理します。';
}
echo '</p></div>';
});
/**
* =========================================================
* 管理メニュー(将来拡張:対象拡張子設定など)
* =========================================================
*/
add_action( 'admin_menu', function() {
add_options_page(
'Metadata Purger 設定',
'Metadata Purger',
'manage_options',
'metadata-purger',
'mp_settings_page'
);
});
function mp_settings_page() {
echo '<div class="wrap"><h1>Metadata Purger 設定</h1>';
echo '<p>このプラグインはアップロード時に PDF・Word・Excel・PowerPoint のメタデータを自動的に削除します。</p>';
echo '<ul><li>ExifTool が利用可能な場合:PDF含む全形式を対象。</li>';
echo '<li>ExifTool が利用不可の場合:Office形式のみZipArchiveで処理。</li></ul>';
$exiftool = trim( shell_exec( 'which exiftool' ) );
echo '<p><strong>ExifTool 状況:</strong> ' . ( $exiftool ? '検出済み(有効)' : '未検出(限定モード)' ) . '</p>';
echo '</div>';
}一応、exiftoolが入っていればPDFデータも強制編集できるのですがさすがに無理です。諦めました。というわけで実験です。
このように見事に制作者情報が入っているWordファイルを、あえてWordPressにアップロードしてみましょう。ダウンロードはこちらから。
なんということでしょうか。作者情報も何もかも消えてしまいました。これはいったいどういうことでしょう。
メタデータは無慈悲に消せ
WordPressの世界では、見た目も中身も整えて初めて「信頼できる配布」が成り立ちます。プラグインの出番です。いや、この時代の必須装備です。「このファイル、誰が作ったの?」と聞かれたら?→「それは……幻想です。」「なんで会社名が載ってないの?」と聞かれたら?→「幻想です。」メタデータは、黙っていてもいい。語るのは、コンテンツそのものであれ。以上、Red Foxより無慈悲な静寂をお届けしました。




