如何在仅能操作wp-content时将wp-admin/edit.php分类筛选改为多选?
实现分类筛选多选的解决方案(无需修改核心文件)
既然你没法修改wp-admin或wp-includes核心文件夹,也找不到适配WP4.9.5的可用插件,咱们可以自己写个轻量的自定义插件来搞定——完全只用到wp-content的操作权限,而且完美兼容你的WordPress版本。
1. 创建自定义插件文件
在你的wp-content/plugins目录下新建一个文件夹,命名为multi-category-filter,然后在这个文件夹里创建两个文件:
① 主插件文件 multi-category-filter.php
把下面的代码复制进去:
<?php /** * Plugin Name: Multi Category Filter for Edit Posts * Description: 给文章列表页的分类筛选添加多选功能 * Version: 1.0 * Author: Custom Solution * Compatibility: WordPress 4.9.5+ */ // 加载前端JS,修改分类筛选为多选 add_action('admin_enqueue_scripts', 'mcfe_load_admin_scripts'); function mcfe_load_admin_scripts($hook) { // 只在文章列表页加载脚本 if ($hook !== 'edit.php') { return; } wp_enqueue_script('mcfe-multi-select', plugins_url('multi-select.js', __FILE__), array('jquery'), '1.0', true); } // 处理后端查询,支持多分类筛选逻辑 add_action('pre_get_posts', 'mcfe_handle_multi_category_query'); function mcfe_handle_multi_category_query($query) { global $pagenow; // 仅在后台文章列表的主查询中生效 if (is_admin() && $pagenow === 'edit.php' && $query->is_main_query() && isset($_GET['category_name']) && is_array($_GET['category_name'])) { // 安全过滤分类参数 $categories = array_map('sanitize_text_field', $_GET['category_name']); // 设置多分类查询规则(匹配任一选中分类) $query->set('tax_query', array( array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => $categories, 'operator' => 'IN', ) )); // 清空原有参数避免冲突 unset($_GET['category_name']); } }
② 前端脚本文件 multi-select.js
同样放在multi-category-filter文件夹里,代码如下:
jQuery(document).ready(function($) { // 定位到分类筛选下拉框 var categorySelect = $('#cat'); if (categorySelect.length) { // 开启多选模式 categorySelect.prop('multiple', true); // 修改name属性,让表单提交数组格式的选中值 categorySelect.attr('name', 'category_name[]'); // 调整样式,让多选框更易用 categorySelect.css('height', 'auto'); } });
2. 安装并激活插件
通过FTP或者GoDaddy的文件管理器,把multi-category-filter整个文件夹上传到wp-content/plugins目录下,然后登录WordPress后台,在「插件」列表里找到这个插件,点击「激活」就可以用了。
3. 使用方式
激活后回到文章列表页(wp-admin/edit.php),原来的分类下拉框会变成多选模式:
- Windows用户按住
Ctrl键可以多选多个分类 - Mac用户按住
Cmd键可以多选多个分类 - 选完后点击「筛选」按钮,就能看到符合任一选中分类的文章了
替代方案:放到主题functions.php(不推荐)
如果你不想单独建插件,也可以把PHP代码(去掉插件头部注释)加到当前主题的functions.php里,同时把JS改成内联脚本:
// 内联添加多选逻辑脚本 add_action('admin_footer-edit.php', 'mcfe_inline_multi_select_js'); function mcfe_inline_multi_select_js() { ?> <script> jQuery(document).ready(function($) { var categorySelect = $('#cat'); if (categorySelect.length) { categorySelect.prop('multiple', true); categorySelect.attr('name', 'category_name[]'); categorySelect.css('height', 'auto'); } }); </script> <?php } // 后端多分类查询处理 add_action('pre_get_posts', 'mcfe_handle_multi_category_query'); function mcfe_handle_multi_category_query($query) { global $pagenow; if (is_admin() && $pagenow === 'edit.php' && $query->is_main_query() && isset($_GET['category_name']) && is_array($_GET['category_name'])) { $categories = array_map('sanitize_text_field', $_GET['category_name']); $query->set('tax_query', array( array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => $categories, 'operator' => 'IN', ) )); unset($_GET['category_name']); } }
不过这种方式的问题是,主题更新时functions.php里的自定义代码会被覆盖,所以还是优先推荐自定义插件的方式。
内容的提问来源于stack exchange,提问作者Khrisna Gunanasurya
相关产品推荐
相关产品推荐

