WordPress自定义Spond插件出现ArgumentCountError致命错误求助
问题:WordPress插件Spond事件展示遭遇致命错误
Fatal error: Uncaught ArgumentCountError: Too few arguments to function Spond::__construct(), 0 passed in C:\wamp64\www\stage\wordpress wpm\wp-content\plugins\spond-plugin\spond-plugin.php on line 122 and exactly 2 expected in C:\wamp64\www\stage\wordpress wpm\wp-content\plugins\spond-plugin\s
错误核心在于display_events()函数中,实例化Spond类时未传入构造函数要求的用户名和密码参数,而Spond类的__construct方法明确要求必须传入2个参数。
解决方案
1. 存储登录凭据到Session
用户登录成功后,将用户名和密码存入Session,后续直接从Session读取使用:
修改spond-plugin.php中处理$_GET参数的代码块:
// If there are query parameters, attempt to log in if (isset($_GET['username']) && isset($_GET['password'])) { $username = sanitize_text_field($_GET['username']); $password = sanitize_text_field($_GET['password']); // Your Spond class instantiation $spond = new Spond($username, $password); $spond->login(); // Set session variables for login status and credentials $_SESSION['spond_logged_in'] = true; $_SESSION['spond_username'] = $username; // 新增:存储用户名 $_SESSION['spond_password'] = $password; // 新增:存储密码 // Get and display events ob_start(); $spond->get_events('74ED14831B694B679A0CB778A33D860F'); return ob_get_clean(); }
2. 修改display_events()函数
从Session中读取存储的凭据,传入Spond类的构造函数:
// Display events function function display_events() { ob_start(); // 从Session获取登录凭据 $username = isset($_SESSION['spond_username']) ? $_SESSION['spond_username'] : ''; $password = isset($_SESSION['spond_password']) ? $_SESSION['spond_password'] : ''; // 实例化时传入必填参数 $spond = new Spond($username, $password); $spond->get_events('74ED14831B694B679A0CB778A33D860F'); echo ob_get_clean(); }
3. 完善Logout逻辑
注销时同时清除存储的凭据,避免残留:
if (isset($_POST['logout']) && $_POST['logout'] == 1) { // Logout action: unset all session variables unset($_SESSION['spond_logged_in']); unset($_SESSION['spond_username']); // 新增:清除用户名 unset($_SESSION['spond_password']); // 新增:清除密码 return 'Logged out successfully.'; }
额外优化建议
- 安全优化:Session存储明文密码存在风险,建议改为存储登录后获取的
accessToken,修改Spond类的login方法,将accessToken存入Session,后续直接使用Token而非重复执行登录流程。 - 错误防护:在
display_events()中增加凭据校验,避免Session失效时再次触发错误:
function display_events() { ob_start(); if (!isset($_SESSION['spond_username']) || !isset($_SESSION['spond_password'])) { echo '请重新登录'; return ob_get_clean(); } $username = $_SESSION['spond_username']; $password = $_SESSION['spond_password']; $spond = new Spond($username, $password); $spond->get_events('74ED14831B694B679A0CB778A33D860F'); echo ob_get_clean(); }
内容的提问来源于stack exchange,提问作者Merel Rose De Vries
相关产品推荐
相关产品推荐

