由于本章的文章已超过4K,最初的固定连接设置的是 %post_id% 编辑文章,需要根据文章 ID 在后台快速搜索。增加文章ID可以通过插件解决,还需要增强搜索功能,可通过ID快速搜索。现在不通插件一次解决两个问题。
解决方法
1、增强后台文章列表搜索功能,支持多个ID一起搜索。举例:1202,18495 ID之间用英文逗号分隔。在主题的 functions.php 中添加以下代码:
/* 增强WordPress搜索功能,支持通过文章ID搜索 */
// 修改搜索查询,支持ID搜索
add_filter('posts_search', 'search_by_post_id', 10, 2);
function search_by_post_id($search, $wp_query) {
global $wpdb;
// 只处理主查询和搜索请求
if (!$wp_query->is_main_query() || !$wp_query->is_search()) {
return $search;
}
$search_term = trim($wp_query->get('s'));
// 检查搜索词是否为单个数字ID
if (ctype_digit($search_term)) {
$post_id = (int) $search_term;
$search = $wpdb->prepare(
" AND ({$wpdb->posts}.ID = %d OR {$wpdb->posts}.post_title LIKE %s)",
$post_id,
'%' . $wpdb->esc_like($search_term) . '%'
);
}
// 检查搜索词是否为多个逗号分隔的ID
elseif (preg_match('/^\d+(,\d+)*$/', $search_term)) {
$ids = array_map('intval', explode(',', $search_term));
$id_list = implode(',', $ids);
$search = $wpdb->prepare(
" AND ({$wpdb->posts}.ID IN ({$id_list}) OR {$wpdb->posts}.post_title LIKE %s)",
'%' . $wpdb->esc_like($search_term) . '%'
);
}
return $search;
}

2、文章列表增加ID,并将ID排在最前面居中显示,可根据自己需求设置ID列宽。在主题的 functions.php 中添加以下代码:
/* 在WordPress后台文章列表添加ID列并显示在最前面*/
// 添加ID列标题并调整位置
add_filter('manage_posts_columns', 'add_post_id_column', 5);
function add_post_id_column($columns) {
$new_columns = array('post_id' => 'ID');
return array_merge($new_columns, $columns);
}
// 显示ID列内容
add_action('manage_posts_custom_column', 'display_post_id_column', 10, 2);
function display_post_id_column($column, $post_id) {
if ($column === 'post_id') {
echo $post_id;
}
}
// 让ID列可排序
add_filter('manage_edit-post_sortable_columns', 'make_post_id_sortable');
function make_post_id_sortable($sortable_columns) {
$sortable_columns['post_id'] = 'ID';
return $sortable_columns;
}
// 对ID列进行排序处理
add_action('pre_get_posts', 'sort_posts_by_id');
function sort_posts_by_id($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
$orderby = $query->get('orderby');
if ('ID' === $orderby) {
$query->set('orderby', 'ID');
}
}
// 设置ID列的宽度(可选)
add_action('admin_head-edit.php', 'custom_post_id_column_width');
function custom_post_id_column_width() {
echo '<style>
.column-post_id { width: 100px; text-align: center; }
</style>';
}
