制作带SQLite数据库的WordPress PHP插件:读取数据显示在页脚咨询
完善你的WordPress页脚SQLite数据读取PHP插件
我明白你作为非PHP开发者,想快速实现一个从SQLite数据库读取数据并显示在WordPress页脚的功能,咱们一步步把你的代码补全并修正几个关键问题:
原代码的几个小问题
- SQL语句里重复选择了
morning字段,应该只保留一次 - 使用
exec()方法不对,预编译语句需要用execute()来获取结果集 - 直接写
timetable.db会导致WordPress在网站根目录找数据库文件,需要用插件的绝对路径 - 缺少错误处理,万一连接或查询失败会直接报错
- 没有整合到WordPress的钩子系统里,页脚输出需要用
wp_footer钩子
完整的可运行插件代码
把下面的代码保存为你的插件文件(比如sqlite-footer-timetable.php),放在WordPress的wp-content/plugins/目录下,然后在后台启用插件即可:
<?php /* Plugin Name: SQLite Footer Timetable Description: 从SQLite数据库读取日程并显示在WordPress页脚 Version: 1.0 Author: Danial Bagheri */ // 注册页脚输出的钩子 add_action('wp_footer', 'display_sqlite_timetable_in_footer'); function display_sqlite_timetable_in_footer() { // 1. 定义数据库文件的绝对路径(确保timetable.db和这个插件文件在同一目录) $db_path = plugin_dir_path(__FILE__) . 'timetable.db'; // 2. 连接SQLite数据库,添加错误处理 try { $connection = new SQLite3($db_path); if (!$connection) { throw new Exception('无法连接到SQLite数据库'); } } catch (Exception $e) { echo '<p style="color:red;">数据库连接错误:' . $e->getMessage() . '</p>'; return; } // 3. 获取今天的日期,格式为d/m(和数据库里的date字段格式匹配) $todayDate = date("d/m"); // 4. 修正SQL语句,去掉重复的morning字段 $sql = <<<HEREDOC SELECT morning, evening FROM manchester WHERE date = :date HEREDOC; // 5. 预编译SQL并绑定参数 $rs = $connection->prepare($sql); if (!$rs) { echo '<p style="color:red;">SQL预编译失败:' . $connection->lastErrorMsg() . '</p>'; $connection->close(); return; } $rs->bindValue(':date', $todayDate, SQLITE3_TEXT); // 6. 执行查询并获取结果 $result = $rs->execute(); if (!$result) { echo '<p style="color:red;">查询执行失败:' . $connection->lastErrorMsg() . '</p>'; $connection->close(); return; } // 7. 读取结果并输出到页脚 $row = $result->fetchArray(SQLITE3_ASSOC); if ($row) { echo '<div class="footer-timetable">'; echo '<p>今日日程:</p>'; echo '<ul>'; echo '<li>上午:' . esc_html($row['morning']) . '</li>'; // 用esc_html防止XSS echo '<li>晚上:' . esc_html($row['evening']) . '</li>'; echo '</ul>'; echo '</div>'; } else { echo '<p>今日暂无日程</p>'; } // 8. 关闭数据库连接 $connection->close(); } ?>
关键细节解释
- 路径处理:
plugin_dir_path(__FILE__)会获取当前插件文件所在的目录绝对路径,确保能正确找到timetable.db - 错误处理:添加了try-catch和各种判断,避免网站因为数据库问题白屏
- 安全输出:用
esc_html()过滤输出内容,防止XSS攻击(WordPress开发的最佳实践) - WordPress钩子:通过
add_action('wp_footer', ...)把输出绑定到页脚钩子,符合WordPress的开发规范
这样修改后,你的插件就能正常读取SQLite数据并显示在WordPress页脚啦!
内容的提问来源于stack exchange,提问作者Danial Bagheri
相关产品推荐
相关产品推荐

