求助:为已开发的WordPress后台小工具添加数据库大小显示功能
给WordPress小工具添加数据库大小显示功能
嘿,我来帮你搞定这个功能!咱们一步步来,先搞定获取数据库大小的核心逻辑,再把它整合到你现有的小工具里。
1. 编写获取数据库大小的核心函数
WordPress没有内置函数直接返回数据库总大小,咱们可以通过查询MySQL的information_schema来计算当前数据库的总占用空间,这个方法在绝大多数WordPress主机上都能正常工作:
function get_wp_database_size() { global $wpdb; // 获取当前WordPress数据库名(从wp-config.php的常量中读取) $db_name = DB_NAME; // 查询所有表的数据+索引大小,求和得到总大小 $query = " SELECT SUM(data_length + index_length) AS total_size FROM information_schema.TABLES WHERE table_schema = %s "; // 用prepare方法防止SQL注入 $total_size = $wpdb->get_var($wpdb->prepare($query, $db_name)); // 如果查询失败(比如权限问题),返回0 if (!$total_size) { return 0; } return $total_size; }
2. 大小格式化函数(实用补充)
如果你的小工具还没有把字节转换成友好单位(KB/MB/GB)的函数,下面这个可以直接用,也能复用在你已有的文件大小显示逻辑里:
function format_storage_size($bytes) { if ($bytes === 0) { return '0 B'; } $units = array('B', 'KB', 'MB', 'GB', 'TB'); $factor = floor((strlen($bytes) - 1) / 3); return sprintf("%.2f %s", $bytes / pow(1024, $factor), $units[$factor]); }
3. 整合到现有小工具中
假设你的小工具是基于WordPress官方的WP_Widget类开发的,只需要在小工具的输出方法(通常是widget())里添加数据库大小的显示逻辑就行:
// 示例小工具类(替换成你自己的类名) class Site_Storage_Widget extends WP_Widget { // 你的构造函数、更新/设置方法等已有代码... public function widget($args, $instance) { echo $args['before_widget']; // 显示小工具标题(保留你已有的逻辑) if (!empty($instance['title'])) { echo $args['before_title'] . apply_filters('widget_title', $instance['title']) . $args['after_title']; } // 显示你已有的网站文件大小 $file_size = get_wp_filesystem_size(); // 替换成你自己的文件大小获取函数 echo '<p><strong>网站文件大小:</strong>' . format_storage_size($file_size) . '</p>'; // 新增:显示数据库大小 $db_size = get_wp_database_size(); echo '<p><strong>数据库大小:</strong>' . format_storage_size($db_size) . '</p>'; echo $args['after_widget']; } // 其他已有方法... }
4. 优化小技巧:添加缓存
如果不想每次加载小工具都查询数据库,可以给获取数据库大小的函数加上缓存,减少数据库请求压力,比如设置1小时缓存:
function get_wp_database_size() { $transient_key = 'wp_database_size_cache'; $cached_size = get_transient($transient_key); // 如果缓存存在,直接返回缓存值 if ($cached_size !== false) { return $cached_size; } // 下面是原有的查询逻辑 global $wpdb; $db_name = DB_NAME; $query = " SELECT SUM(data_length + index_length) AS total_size FROM information_schema.TABLES WHERE table_schema = %s "; $total_size = $wpdb->get_var($wpdb->prepare($query, $db_name)); $total_size = $total_size ?: 0; // 设置1小时缓存(3600秒) set_transient($transient_key, $total_size, 3600); return $total_size; }
这样修改后,你的小工具就能在后台面板同时展示网站文件和数据库的占用空间了,用户一目了然~
内容的提问来源于stack exchange,提问作者Darren Cain
相关产品推荐
相关产品推荐

