WordPressで長くサイトを運営していると、広告タグがどんどん増えていきます。記事に貼ったり、ウィジェットに入れたり、子テーマのファイルに直接書いたり…。そして数年後、「この広告、どこに貼ったっけ?」という状態になります。
今回、自分の運営しているサイトでまさにこの状態になりました。広告の差し替えをしたいのに、どこに書いたのかまったく思い出せない。管理画面で記事を1つずつ開いて探すのは、記事数が多いサイトだとほぼ不可能です。
そこで、SSHとWP-CLIを使って広告のドメイン名でサイト全体をまとめて検索する方法を試したところ、数分で全部見つかりました。この記事では、その手順を実際の体験談も交えて詳しく紹介します。
管理画面で探すのが大変な理由
WordPressの管理画面にも記事の検索機能はありますが、広告タグ探しにはあまり向いていません。
| 管理画面の弱点 | 理由 |
|---|---|
| 記事本文しか探せない | ウィジェットやテーマのファイルは検索対象外 |
| HTMLタグの中まで探しにくい | scriptタグやiframeのURLはヒットしないことがある |
| カスタムフィールドは見えない | 記事ごとの挿入コード欄は1記事ずつ開かないと確認できない |
| 記事数が多いと重い | 数千〜数万記事あると検索自体が遅い |
特に子テーマのPHPファイルに直接書いた広告は、管理画面からは絶対に見つかりません。ここを見落として、何時間も記事を探し回るのはよくある話です。
今回使う道具:SSHとWP-CLI
今回の方法では、次の2つを使います。
| 道具 | 役割 |
|---|---|
| SSH | 自分のパソコンからサーバーに接続して、コマンドで操作する仕組み |
| WP-CLI | WordPressをコマンドで操作できるツール。データベースの検索もできる |
最近のレンタルサーバーは、ほとんどがSSH接続に対応していて、WP-CLIも最初から入っていることが多いです。WindowsならPowerShellに標準でSSHが入っているので、特別なソフトをインストールする必要もありません。
SSHが使えない場合は、phpMyAdminでも同じ検索ができます(後半で紹介します)。
広告タグが入っている可能性がある4か所
まず、WordPressのどこに広告タグが保存されているのかを整理しておきます。ここを理解しておくと、探し漏れがなくなります。
| 場所 | 何が入っているか | 保存先 |
|---|---|---|
| 記事本文 | 投稿・固定ページ・再利用ブロックに貼った広告 | データベース(posts) |
| カスタムフィールド | 記事ごとのヘッダー・フッター挿入コードなど | データベース(postmeta) |
| ウィジェット・テーマ設定 | テキストウィジェット、Cocoon設定の挿入コードなど | データベース(options) |
| テーマのファイル | 子テーマのPHPファイルに直接書いた広告 | サーバー上のファイル |
ポイントは、データベースが3か所、ファイルが1か所ということです。記事本文だけ探して「見つからない」と思い込むのが一番の落とし穴なので、必ず4か所すべて確認しましょう。
手順1:SSHでサーバーに接続する
Windowsの場合は、Windowsキー+Xを押して「ターミナル」または「Windows PowerShell」を開きます。
次のコマンドで接続します。鍵ファイル・ポート番号・ユーザー名・ホスト名は、ご自身のサーバーの情報に置き換えてください。
ssh -i C:\Users\ユーザー名\.ssh\鍵ファイル.key -p ポート番号 ユーザー名@ホスト名鍵にパスフレーズを設定している場合は入力を求められます。入力しても画面には何も表示されませんが、正常なのでそのままEnterを押してください。
接続できたら、WordPressが入っているフォルダへ移動します。フォルダの場所はサーバーによって違いますが、多くの場合「ドメイン名/public_html」です。
cd ~/example.com/public_htmlプロンプトの表示が「public_html」に変わっていれば移動成功です。
手順2:テーブル名の接頭辞を確認する
WordPressのデータベースのテーブル名は「wp_posts」のように接頭辞が付いています。セキュリティ対策のため、サーバーの簡単インストール機能では「wp_」以外のランダムな文字列になっていることもよくあります。
先に確認しておきましょう。
wp db query "SHOW TABLES LIKE '%posts';"「wp_posts」と表示されれば接頭辞は「wp_」、「abcd_posts」なら「abcd_」です。以下の手順では「wp_」として書いていますので、違う場合は読み替えてください。
手順3:記事本文を検索する
ここからが本番です。「example-ad」の部分を、探したい広告のドメイン名(の一部)に変えて実行します。
wp db query "SELECT ID, post_title, post_type, post_status FROM wp_posts WHERE post_content LIKE '%example-ad%' AND post_type != 'revision';"コマンドの意味をざっくり説明すると、こうなります。
| 部分 | 意味 |
|---|---|
| SELECT ID, post_title, post_type, post_status | 記事ID・タイトル・種類・公開状態を表示する |
| FROM wp_posts | 記事のテーブルから探す |
| post_content LIKE ‘%example-ad%’ | 本文に「example-ad」を含むもの |
| post_type != ‘revision’ | リビジョン(過去の保存履歴)は除く |
リビジョンを除いておかないと、同じ記事の過去バージョンが大量にヒットして見づらくなるので注意してください。
ヒットすると記事IDとタイトルが一覧で表示されます。何も表示されなければ該当なしです。
post_typeの表示によって、どこに入っているかが分かります。
| post_type | 意味 |
|---|---|
| post | 投稿 |
| page | 固定ページ |
| wp_block | 再利用ブロック(パターン) |
wp_blockと出た場合はラッキーです。再利用ブロックを1か所直せば、使っている記事すべてに反映されます。
件数だけ知りたい場合
画像のURLなど、大量にヒットしそうなものは先に件数を確認しておくと安心です。
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_content LIKE '%example-ad%' AND post_type != 'revision';"手順4:カスタムフィールドを検索する
Cocoonの記事編集画面の下のほうにある「ヘッダー・フッターに挿入するコード」欄などは、本文ではなくカスタムフィールドに保存されています。記事本文の検索ではヒットしないので、別に探す必要があります。
wp db query "SELECT post_id, meta_key FROM wp_postmeta WHERE meta_value LIKE '%example-ad%';"ヒットした場合、post_idが記事IDです。管理画面でその記事の編集画面を開いて、下のほうの入力欄を確認してください。
手順5:ウィジェット・テーマ設定を検索する
ウィジェットやテーマの設定は、optionsテーブルにまとめて保存されています。
wp db query "SELECT option_name FROM wp_options WHERE option_value LIKE '%example-ad%';"表示されるoption_nameで、どこに入っているかが分かります。よく出てくるものをまとめておきます。
| option_name | 場所 |
|---|---|
| widget_text | テキストウィジェット |
| widget_custom_html | カスタムHTMLウィジェット |
| widget_block | ブロックウィジェット(新しいウィジェット画面) |
| widget_pc_text | Cocoonの「[C] PC用テキスト」ウィジェット |
| widget_mobile_text | Cocoonの「[C] モバイル用テキスト」ウィジェット |
| theme_mods_テーマ名 | テーマの設定(Cocoon設定の挿入コードなど) |
今回の自分のケースでは、ここでwidget_pc_textがヒットしました。Cocoonの「PC用テキスト」ウィジェットは、PCで見た時だけ表示されるので、スマホで確認していると存在に気づきにくいんですよね。
ウィジェットだった場合は、管理画面の「外観 → ウィジェット」から該当するウィジェットを探して編集します。
手順6:テーマのファイルを検索する
最後はテーマのファイルです。子テーマのPHPファイルに直接広告を書いている場合、データベースをいくら探しても見つかりません。grepというコマンドで、ファイルの中身をまとめて検索します。
grep -rn "example-ad" wp-content/themes| 部分 | 意味 |
|---|---|
| grep | ファイルの中から文字を探すコマンド |
| -r | フォルダの中を全部たどって探す |
| -n | 見つかった行番号も表示する |
| wp-content/themes | テーマのフォルダを対象にする |
ヒットすると「ファイル名:行番号:その行の内容」の形で表示されるので、どのファイルの何行目に書いてあるかが一発で分かります。
前後の行も確認したい時は、行番号を指定して表示できます(例:318行目から328行目)。
sed -n '318,328p' wp-content/themes/子テーマ名/ファイル名.phpプラグインの中に書いた可能性がある場合は、対象を「wp-content/plugins」に変えれば同じように探せます。
実際に探してみた結果
今回、3つの広告ドメインを探しました。結果はこんな感じです。
| 広告 | 記事本文 | カスタムフィールド | ウィジェット・設定 | テーマのファイル |
|---|---|---|---|---|
| 広告A | なし | なし | なし | 1か所 |
| 広告B | なし | なし | 1か所 | 2か所 |
| 広告C | なし | なし | なし | 別ファイルで発見 |
「記事内のどこかに貼ったはず」と思い込んでいたのですが、実際には記事本文には1つも入っていませんでした。全部、子テーマのファイルかウィジェットでした。思い込みで記事だけ探していたら、永遠に見つからなかったと思います。
つまずきやすいポイント
WP-CLIのコマンドがエラーになる
サーバーによっては、WP-CLIを動かすPHPのバージョンが古く、「wp post list」や「wp option get」などのコマンドがエラーになることがあります。
その場合でも、wp db query(データベースを直接検索するコマンド)は動くことが多いです。この記事の手順はすべてwp db queryで書いているので、ほかのコマンドが動かない環境でも使えます。
何も表示されないのは正常
検索してヒットしなかった場合、エラーも何も出ずにそのまま次の入力待ちになります。壊れているわけではなく「該当なし」という意味なので安心してください。
ドメイン名は短めに指定する
「https://www.」から全部入れると、httpとhttpsの違いや「//」から始まる書き方の違いでヒットしないことがあります。ドメイン名の特徴的な部分だけで検索するのがおすすめです。
どこにも見つからない場合
4か所すべて探しても見つからない場合は、別の広告タグが裏で読み込んでいる可能性があります。
広告ネットワークのスクリプトの中には、自分自身の中で別のドメインの広告を読み込むものがあります。この場合、ブラウザの開発者ツールでは表示されていても、サイト内のどこにもそのドメイン名は書かれていません。貼ってある広告タグを1つずつ外して、どれが読み込んでいるかを確認する必要があります。
SSHが使えない場合はphpMyAdminで
SSHが使えないサーバーでも、データベースの検索はphpMyAdminの「SQL」タブで同じことができます。手順3〜5のコマンドから、wp db queryと前後の「”」を取り除いたSQL文を貼り付けて実行してください。
SELECT ID, post_title, post_type, post_status FROM wp_posts WHERE post_content LIKE '%example-ad%' AND post_type != 'revision';ただし、テーマのファイル検索(grep)はphpMyAdminではできないので、FTPソフトでファイルをダウンロードして、テキストエディタの「フォルダ内検索」機能で探すことになります。
注意:検索だけなら安全、書き換えは慎重に
この記事で紹介したコマンドは、すべて見るだけ(検索だけ)なので、実行してもサイトには何の影響もありません。
一方で、データベースを直接書き換えるコマンドで一括置換をすることもできますが、失敗するとサイトが壊れる可能性があります。広告の差し替えは、見つけた場所を管理画面やファイルから手作業で直すのが安全です。どうしても一括でやりたい場合は、必ず事前にバックアップを取りましょう。
おまけ:編集後に表示が崩れた時は
広告タグを修正した直後、スマホで確認したら「サイドバーが急に消えた!」という事態になりました。ファイルの書き方を間違えたのかと焦って、タグの開け閉めを全部確認したのですが問題なし。
結局、原因はただのキャッシュでした。キャッシュを削除したら、何事もなかったかのように表示されました。
ファイルを編集して表示がおかしくなった時は、慌てる前にまずブラウザやキャッシュ系プラグインのキャッシュを削除してみましょう。
まとめ
| 探す場所 | コマンド | 見落としやすさ |
|---|---|---|
| 記事本文 | wp db query(wp_posts) | 低 |
| カスタムフィールド | wp db query(wp_postmeta) | 中 |
| ウィジェット・設定 | wp db query(wp_options) | 中 |
| テーマのファイル | grep -rn | 高 |
広告タグ探しのコツは、「データベースはwp db query、ファイルはgrep」の2本立てで、4か所すべてを確認することです。
管理画面で1記事ずつ開いて探すと何時間もかかりますが、この方法なら数分で終わります。広告の差し替えや整理をする時に、ぜひ試してみてください。





コメント