はじめに
以下の質問に回答します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// 一覧にフィルターボタンを追加
add_action('restrict_manage_posts', function () {
global $pagenow;
if ($pagenow !== 'edit.php') {
return;
}
$slug_key = isset($_GET['slug_key']) ? sanitize_text_field($_GET['slug_key']) : '';
$post_id = isset($_GET['post_id']) ? absint($_GET['post_id']) : '';
?>
<input type="text" style="margin-right: 6px;" name="slug_key" value="<?= esc_attr($slug_key); ?>" placeholder="スラッグの部分一致で検索">
<input type="number" style="margin-right: 6px;" name="post_id" value="<?= $post_id ?: ''; ?>" placeholder="投稿IDで検索">
<?php
});
// 投稿クエリの取得条件を変更
add_action('pre_get_posts', function ($query) {
global $pagenow;
if (!is_admin() || !$query->is_main_query() || $pagenow !== 'edit.php') {
return;
}
$post_id = isset($_GET['post_id']) ? absint($_GET['post_id']) : 0;
// 投稿ID指定を優先
if ($post_id > 0) {
$query->set('p', $post_id);
return;
}
$slug_key = isset($_GET['slug_key']) ? sanitize_text_field($_GET['slug_key']) : '';
// スラッグの部分一致検索
if ($slug_key !== '') {
add_filter('posts_where', function ($where, $wp_query) use ($slug_key, $query) {
// 対象のクエリに対してのみ適用
if ($wp_query !== $query) {
return $where;
}
global $wpdb;
$encoded_slug = urlencode($slug_key);
$where .= $wpdb->prepare(
" AND ({$wpdb->posts}.post_name LIKE %s OR {$wpdb->posts}.post_name LIKE %s)",
'%' . $wpdb->esc_like($slug_key) . '%',
'%' . $wpdb->esc_like($encoded_slug) . '%'
);
return $where;
}, 10, 2);
}
});
さいごに
今回紹介した方法を使えば、投稿や固定ページ一覧画面でスラッグとIDを使った絞り込み検索が簡単に追加できます。
この機能を活用すれば、管理画面での投稿検索が大幅に効率化され、特定の投稿を素早く見つけることができるようになります。

