0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

wordpress でのログ出力

Last updated at Posted at 2026-01-05

まずは config.php(htmlディレクトリの中)で define('WP_DEBUG', false); の false を true に変える
以下を、function.phpに貼り付ける。

    add_filter('wp_insert_post_data', function($data, $postarr) {
        if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $data;
    
        $current_post_id = $postarr['ID'];
        $content = $data['post_content'];
        $upload_dir = wp_upload_dir();
        $csv_path = $upload_dir['basedir'] . '/test_api/link/test.csv';
    
        // --- 【ここからデバッグ用ログ出力】 ---
        error_log("--- Link Replace Debug Start (Post ID: $current_post_id) ---");
        error_log("Expected CSV path: " . $csv_path);
    
        if (!file_exists($csv_path)) {
            error_log("RESULT: File NOT FOUND. (パスが間違っているか、ファイルがありません)");
        } else {
            error_log("RESULT: File EXISTS. (ファイルは見つかりました)");
            
            if (($handle = fopen($csv_path, "r")) !== FALSE) {
                fgetcsv($handle); // ヘッダー読み飛ばし
                $found_match = false;
                while (($csv_row = fgetcsv($handle)) !== FALSE) {
                    $target_id = trim($csv_row[0]);
                    if ($current_post_id == $target_id) {
                        error_log("RESULT: MATCH FOUND! ID $target_id is in CSV.");
                        $found_match = true;
                        
                        // 置換処理の実行(ログ付き)
                        $keyword = trim($csv_row[1], " \t\n\r\0\x0B\xEF\xBB\xBF\"");
                        $link_url = trim($csv_row[2]);
                        
                        if (strpos($content, $link_url) === false) {
                            $link_html = '<a href="' . esc_url($link_url) . '">' . esc_html($keyword) . '</a>';
                            $new_content = preg_replace('/' . preg_quote($keyword, '/') . '/u', $link_html, $content, 1);
                            if ($new_content !== $content) {
                                $content = $new_content;
                                error_log("RESULT: Successfully replaced keyword with link.");
                            } else {
                                error_log("RESULT: Keyword '$keyword' not found in post content.");
                            }
                        } else {
                            error_log("RESULT: Link already exists. Skipping.");
                        }
                    }
                }
                if (!$found_match) error_log("RESULT: This Post ID was not found in the CSV rows.");
                fclose($handle);
            } else {
                error_log("RESULT: Permission Denied. Could not open the file.");
            }
        }
        error_log("--- Debug End ---");
        // --- 【デバッグ用ログ出力ここまで】 ---
    
        $data['post_content'] = $content;
        return $data;
    }, 10, 2);

もしdegug.log が出力されていない場合、画面に直接表示させると確実。
wp-config.php の設定を少しだけ変える。

define( 'WP_DEBUG_DISPLAY', true ); に変更(falseからtrueへ)

プログラムが動かない原因が「エラー」ではなく、単に**「条件に合致しなくてスルーされているだけ」**の場合、画面には何も表示されません。

そのため、検証する際は以下の**「3つのパターン」**のどれになるかを確認してください。

パターンA:画面に「Notice」や「Error」が出る

今の状態で「記事を更新」したとき、先ほどの画像のような英語のメッセージが新しく増えていれば、それがヒントになります。

パターンB:画面には何も出ず、普通に更新が終わる

これが一番厄介です。「プログラムは動いたけれど、置換する条件(IDが一致するなど)を満たさなかった」という状態です。

対策: wp_die() を使い、強制的に結果を表示させる必要があります。

パターンC:画面が真っ白になる

「致命的なエラー(Fatal Error)」が起きています。

対策: WP_DEBUG が true なら、必ず原因(「○○行目が間違っている」など)が表示されます。

「確実な検証コード」

今の functions.php のコードを、以下のように**「成功しても失敗しても、画面に大きな文字で結果を表示する」**形に書き換えて「更新」ボタンを押す。

PHP

add_filter('wp_insert_post_data', function($data, $postarr) {
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $data;

    $current_post_id = $postarr['ID'];
    $upload_dir = wp_upload_dir();
    $csv_path = $upload_dir['basedir'] . '/test_api/link/test.csv';

    // --- 【ここから強制表示デバッグ】 ---
    $debug_msg = "<h3>検証開始 (Post ID: $current_post_id)</h3>";
    $debug_msg .= "探しているパス: <code>$csv_path</code><br>";

    if (!file_exists($csv_path)) {
        $debug_msg .= "<b style='color:red;'>結果: CSVファイルが存在しません!</b>";
    } else {
        $debug_msg .= "<b style='color:green;'>結果: CSVファイルは見つかりました。</b><br>";
        
        // CSVの中身を確認
        if (($handle = fopen($csv_path, "r")) !== FALSE) {
            fgetcsv($handle); // 見出し
            $found = false;
            while (($row = fgetcsv($handle)) !== FALSE) {
                if (trim($row[0]) == $current_post_id) {
                    $found = true;
                    $debug_msg .= "一いた!CSV内のキーワード: " . $row[1];
                    break;
                }
            }
            if (!$found) $debug_msg .= "結果: CSVの中にこの投稿ID($current_post_id)は見つかりませんでした。";
            fclose($handle);
        }
    }
    
    // 画面にこのメッセージを叩きつけて処理を止める
    wp_die($debug_msg); 
    // --- 【ここまで】 ---

    return $data;
}, 10, 2);

このコードでわかること

この記事を「更新」した瞬間、通常の画面ではなく真っ白な背景に上のメッセージだけが出ます。

  • 「CSVファイルが存在しません」 と出た場合
    ⇒ FTPで見ている場所と、WordPressが認識している場所が違います。
  • 「投稿IDは見つかりませんでした」 と出た場合
    ⇒ CSVのID列に、余計なスペースや全角文字が入っている可能性があります。

これなら、debug.log が出なくても、100%原因が特定できます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?