WordPressの管理画面(投稿一覧)の検索ボックスは便利ですが、デフォルトでは投稿IDは検索対象に含まれていません。
運用現場では
- 「ID 123 の投稿をすぐ開きたい」
- 「クライアントからIDだけ指定された」
- 「データ移行後の確認でID検索したい」
といったケースが頻繁にあります。
この記事では、管理画面の検索ボックスで投稿IDを検索可能にする方法を解説します。
デフォルトの検索仕様
管理画面の投稿一覧検索は、内部的に WP_Query の s パラメータを使用しています。
検索対象は以下です。
post_titlepost_contentpost_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 を使えば、安全かつ簡潔に拡張可能です。
運用効率を上げたい場合は、ぜひ導入を検討してみてください。


コメント