修改wp-admin/plugins.php插件计数及分页显示异常问题求助
解决WordPress插件页面隐藏插件后分页计数不更新的问题
我完全懂你的困扰——好不容易把目标插件从插件列表里藏起来了,结果顶部的分页计数还老老实实地显示着真实的插件总数,等于变相暴露了隐藏的插件。别着急,咱们来一步步搞定这个问题:
方法一:直接修改全局$totals变量(精准调整计数)
WP_Plugins_List_Table的prepare_items()方法里确实会用到全局的$totals变量来统计各状态的插件数量,咱们可以通过钩子在这个变量计算完成后修改它:
- 用
plugins_list_table_prepare_items动作钩子,这个钩子会在列表准备完成后触发,正好适合调整计数:
add_action('plugins_list_table_prepare_items', 'adjust_hidden_plugin_totals'); function adjust_hidden_plugin_totals() { global $wp_list_table, $totals; // 替换成你实际隐藏的插件数量 $hidden_count = 1; // 修改全局$totals里的"全部"计数 if (isset($totals['all'])) { $totals['all'] -= $hidden_count; } // 同步修改分页参数,确保分页显示正确 if (isset($wp_list_table->_pagination_args['total_items'])) { $wp_list_table->_pagination_args['total_items'] -= $hidden_count; } // 如果隐藏的是特定状态的插件(比如激活/未激活),还要对应修改该状态的计数 // 示例:隐藏的是激活插件时 // if (isset($totals['active'])) { // $totals['active'] -= $hidden_count; // } }
- 把这段代码放到你的主题
functions.php或者自定义插件里,记得根据实际隐藏数量调整$hidden_count的值。
方法二:从源头过滤插件列表(更彻底的方案)
其实更稳妥的方式是直接在插件列表被获取时就过滤掉目标插件,这样$totals会自动基于过滤后的列表计算,不用手动修改计数,一举两得:
add_filter('all_plugins', 'filter_out_hidden_plugins'); function filter_out_hidden_plugins($plugins) { // 替换成你要隐藏的插件的完整标识(目录/文件名),比如"hello-dolly/hello.php" $plugin_to_hide = 'target-plugin/target-plugin.php'; if (isset($plugins[$plugin_to_hide])) { unset($plugins[$plugin_to_hide]); } return $plugins; }
这种方法的好处是,不仅分页计数会自动更新,所有依赖get_plugins()的地方都会同步看不到这个插件,避免出现其他场景下的计数不一致问题。
为什么直接修改_pagination_args没用?
你之前修改_pagination_args里的total_items没生效,是因为页面顶部的“全部(X)”文字是从全局$totals变量里取的值,而非直接使用分页参数的数字。所以必须同时修改$totals和分页参数,才能让计数和分页显示都正确。
内容的提问来源于stack exchange,提问作者Icarus
相关产品推荐
相关产品推荐

