WordPress管理画面の検索に「投稿ID」を含める方法

WordPressの管理画面(投稿一覧)の検索ボックスは便利ですが、デフォルトでは投稿IDは検索対象に含まれていません。

運用現場では

  • 「ID 123 の投稿をすぐ開きたい」
  • 「クライアントからIDだけ指定された」
  • 「データ移行後の確認でID検索したい」

といったケースが頻繁にあります。

この記事では、管理画面の検索ボックスで投稿IDを検索可能にする方法を解説します。


デフォルトの検索仕様

管理画面の投稿一覧検索は、内部的に WP_Querys パラメータを使用しています。

検索対象は以下です。

  • post_title
  • post_content
  • post_excerpt

含まれないもの:

  • 投稿ID(ID)
  • カスタムフィールド
  • タクソノミーID

つまり、検索ボックスに「123」と入力しても、投稿ID 123 を意味して検索はされません。


実装方法:pre_get_posts を使う

管理画面のクエリを書き換えることで対応可能です。

以下のコードを functions.php または専用プラグインに追加してください。

<?php
/**
 * 管理画面の投稿検索に投稿ID検索を追加
 */
add_action('pre_get_posts', function($query) {

    // 管理画面のみ
    if (!is_admin()) {
        return;
    }

    // 投稿一覧ページのみ
    global $pagenow;
    if ($pagenow !== 'edit.php') {
        return;
    }

    // 検索ワードが存在し、数値のみの場合
    if (isset($_GET['s']) && is_numeric($_GET['s'])) {

        // 投稿ID検索に切り替え
        $query->set('p', intval($_GET['s']));
        $query->set('s', '');
    }
});

処理の仕組み

処理内容
is_admin()管理画面限定
$pagenow === 'edit.php'投稿一覧画面限定
is_numeric($_GET['s'])数値検索のみID扱い
$query->set('p', ID)ID指定検索に切替

この実装により、

  • 検索ボックスに「123」と入力
  • 投稿ID 123 の投稿が表示

という動作になります。


カスタム投稿タイプにも対応する場合

上記コードはそのままで対応可能です。

edit.php?post_type=xxxx でも動作します。

もし投稿タイプを限定したい場合は以下を追加します。

$post_type = isset($_GET['post_type']) ? $_GET['post_type'] : 'post';

if (!in_array($post_type, ['post', 'page'])) {
    return;
}

部分一致も対応したい場合(応用)

「123」と検索したら

  • ID 123
  • ID 1234
  • ID 5123

も対象にしたい場合は、posts_where フィルターでSQLを書き換える必要があります。

高度なカスタマイズになるため、必要なら別記事で解説します。


実務的メリット

このカスタマイズを入れることで:

  • 運用効率が大幅に向上
  • データ移行後の確認が高速化
  • 大規模サイトでの作業ストレス軽減

特に数千件以上の投稿があるサイトでは効果的です。


注意点

  • 数値検索時のみID扱いにしている
  • 文字列+数値(例:abc123)は通常検索になる
  • パフォーマンスへの影響はほぼなし

まとめ

WordPress管理画面の検索は、デフォルトでは投稿IDを対象にしていません。

しかし pre_get_posts を使えば、安全かつ簡潔に拡張可能です。

運用効率を上げたい場合は、ぜひ導入を検討してみてください。

コメント

タイトルとURLをコピーしました