为WordPress后台列表添加ID精确搜索功能
方法一:为WordPress后台列表添加ID精确搜索功能
以下是专为WordPress后台添加ID搜索功能的完整插件代码,可直接添加到主题的functions.php文件中或创建为自定义插件:wp-admin-id-search.php
<?php
/**
* Plugin Name: WP Admin ID Search
* Description: 为WordPress后台列表添加ID精确搜索功能
* Version: 1.0
* Author: Your Name
*/
class Admin_ID_Search {
public function __construct() {
add_action('admin_init', [$this, 'add_id_search_support']);
}
// 为所有文章类型添加ID搜索
public function add_id_search_support() {
foreach (get_post_types(['show_ui' => true], 'objects') as $post_type) {
add_filter("manage_{$post_type->name}_posts_columns", [$this, 'add_id_column']);
add_action("manage_{$post_type->name}_posts_custom_column", [$this, 'show_id_column'], 10, 2);
add_filter("parse_query", [$this, 'handle_id_search']);
}
}
// 添加ID列
public function add_id_column($columns) {
return array_merge(['id' => 'ID'], $columns);
}
// 显示ID列内容
public function show_id_column($column, $post_id) {
if ($column === 'id') {
echo $post_id;
}
}
// 处理ID搜索
public function handle_id_search($query) {
global $pagenow;
if (is_admin() && $pagenow === 'edit.php' && isset($_GET['s'])) {
$search = trim($_GET['s']);
if (is_numeric($search)) {
$query->query_vars['post__in'] = [intval($search)];
$query->query_vars['s'] = '';
}
}
return $query;
}
}
new Admin_ID_Search();
该插件实现以下功能:
- 在后台所有文章类型列表添加ID列显示
- 支持在默认搜索框直接输入数字ID进行精确查询
- 自动识别纯数字搜索并转换为ID查询
- 不影响原有关键词搜索功能
- 兼容所有自定义文章类型
安装方法:
- 将代码保存为wp-admin-id-search.php文件,上传到/wp-content/plugins/目录后激活即可。使用时在后台列表搜索框直接输入文章/页面ID数字即可精准定位。( 安装时会提示2个错误 )
- 以上是专为WordPress后台添加ID搜索功能的完整插件代码,可直接添加到主题的 functions.php
方法二:在方法一的基础下修改WordPress后台列表中ID列的宽度为100像素(分类、标签、评论、用户、媒体没有显示 ID)
<?php
/**
* Plugin Name: WP Admin ID Search
* Description: 为WordPress后台列表添加ID精确搜索功能
* Version: 1.0
* Author: Your Name
*/
class Admin_ID_Search {
public function __construct() {
add_action('admin_init', [$this, 'add_id_search_support']);
add_action('admin_head', [$this, 'add_admin_styles']); // 添加样式
}
// 添加自定义样式
public function add_admin_styles() {
echo '<style>
.fixed .column-id {
width: 100px;
}
</style>';
}
// 为所有文章类型添加ID搜索
public function add_id_search_support() {
foreach (get_post_types(['show_ui' => true], 'objects') as $post_type) {
add_filter("manage_{$post_type->name}_posts_columns", [$this, 'add_id_column']);
add_action("manage_{$post_type->name}_posts_custom_column", [$this, 'show_id_column'], 10, 2);
add_filter("parse_query", [$this, 'handle_id_search']);
}
}
// 添加ID列
public function add_id_column($columns) {
return array_merge(['id' => 'ID'], $columns);
}
// 显示ID列内容
public function show_id_column($column, $post_id) {
if ($column === 'id') {
echo $post_id;
}
}
// 处理ID搜索
public function handle_id_search($query) {
global $pagenow;
if (is_admin() && $pagenow === 'edit.php' && isset($_GET['s'])) {
$search = trim($_GET['s']);
if (is_numeric($search)) {
$query->query_vars['post__in'] = [intval($search)];
$query->query_vars['s'] = '';
}
}
return $query;
}
}
new Admin_ID_Search();
方法三:后台列表添加文章ID精确搜索(只有文章ID精确搜索)
文章、分类、标签、评论、用户、媒体都有显示 ID,并设置ID列的宽度固定为60像素。
<?php
/**
* Plugin Name: WP Admin ID Search
* Description: 为WordPress后台列表添加ID精确搜索功能
* Version: 1.2
* Author: Your Name
*/
class Admin_ID_Search {
public function __construct() {
add_action('admin_init', [$this, 'add_id_search_support']);
add_action('admin_head', [$this, 'add_admin_styles']);
add_action('admin_init', [$this, 'add_taxonomy_id_columns']);
add_action('admin_init', [$this, 'add_comments_id_column']);
add_action('admin_init', [$this, 'add_users_id_column']);
add_action('admin_init', [$this, 'add_media_id_column']);
}
// 添加自定义样式
public function add_admin_styles() {
echo '<style>
.fixed .column-id,
.fixed .column-term_id,
.fixed .column-comment_id,
.fixed .column-user_id,
.fixed .column-media_id {
width: 60px !important;
}
</style>';
}
// 为所有文章类型添加ID搜索
public function add_id_search_support() {
foreach (get_post_types(['show_ui' => true], 'objects') as $post_type) {
add_filter("manage_{$post_type->name}_posts_columns", [$this, 'add_id_column']);
add_action("manage_{$post_type->name}_posts_custom_column", [$this, 'show_id_column'], 10, 2);
add_filter("parse_query", [$this, 'handle_id_search']);
}
}
// 为分类和标签添加ID列
public function add_taxonomy_id_columns() {
$taxonomies = get_taxonomies(['show_ui' => true], 'objects');
foreach ($taxonomies as $taxonomy) {
add_filter("manage_edit-{$taxonomy->name}_columns", [$this, 'add_term_id_column']);
add_filter("manage_{$taxonomy->name}_custom_column", [$this, 'show_term_id_column'], 10, 3);
}
}
// 为评论添加ID列
public function add_comments_id_column() {
add_filter('manage_edit-comments_columns', [$this, 'add_comment_id_column']);
add_action('manage_comments_custom_column', [$this, 'show_comment_id_column'], 10, 2);
}
// 为用户添加ID列
public function add_users_id_column() {
add_filter('manage_users_columns', [$this, 'add_user_id_column']);
add_action('manage_users_custom_column', [$this, 'show_user_id_column'], 10, 3);
}
// 为媒体库添加ID列
public function add_media_id_column() {
add_filter('manage_media_columns', [$this, 'add_media_id_column_callback']);
add_action('manage_media_custom_column', [$this, 'show_media_id_column'], 10, 2);
}
// 以下是各列的添加和显示方法
public function add_id_column($columns) {
return array_merge(['id' => 'ID'], $columns);
}
public function show_id_column($column, $post_id) {
if ($column === 'id') echo $post_id;
}
public function add_term_id_column($columns) {
return array_merge(['term_id' => 'ID'], $columns);
}
public function show_term_id_column($content, $column_name, $term_id) {
if ($column_name === 'term_id') echo $term_id;
return $content;
}
public function add_comment_id_column($columns) {
return array_merge(['comment_id' => 'ID'], $columns);
}
public function show_comment_id_column($column, $comment_id) {
if ($column === 'comment_id') echo $comment_id;
}
public function add_user_id_column($columns) {
return array_merge(['user_id' => 'ID'], $columns);
}
public function show_user_id_column($value, $column_name, $user_id) {
if ($column_name === 'user_id') return $user_id;
return $value;
}
public function add_media_id_column_callback($columns) {
return array_merge(['media_id' => 'ID'], $columns);
}
public function show_media_id_column($column, $attachment_id) {
if ($column === 'media_id') echo $attachment_id;
}
// 处理ID搜索
public function handle_id_search($query) {
global $pagenow;
if (is_admin() && $pagenow === 'edit.php' && isset($_GET['s'])) {
$search = trim($_GET['s']);
if (is_numeric($search)) {
$query->query_vars['post__in'] = [intval($search)];
$query->query_vars['s'] = '';
}
}
return $query;
}
}
new Admin_ID_Search();