WordPress短代码脚本无法记录登录用户信息至数据库表问题排查
问题排查与修复方案
1. 短代码未注册
你只定义了save_logged_in函数,但没有将其注册为WordPress短代码,页面中的短代码标签无法触发函数执行。
修复:在函数定义后添加短代码注册代码:
add_shortcode('save_user_session', 'save_logged_in');
之后在目标页面中使用[save_user_session]短代码即可触发逻辑。
2. 变量覆盖导致用户属性获取失败
你先将$user赋值为用户对象,后续又用$user = $user->user_login把它覆盖成字符串,导致后续获取$user->user_email、$user->user_firstname等属性时直接报错,插入逻辑中断。
修复:更换变量名存储登录名:
$user_login = $user->user_login; $email = $user->user_email; $name = $user->user_firstname; $family = $user->user_lastname;
3. 页面ID判断的类型不匹配
get_queried_object_id()返回的是数字类型的页面ID,你用字符串"228"做比较,虽PHP会自动类型转换,但可能出现意外不匹配,建议直接用数字比较:
if ($page_id == 228) {
4. 数据库表与字段验证
- 确认
wp_session_capture(默认表前缀为wp_)已正确创建,且包含login_name、email、fname、lname、date字段,字段类型需匹配(比如date为datetime类型,login_name为字符串类型)。 - 可在插入语句后添加错误调试代码,查看具体数据库错误:
if (!$wpdb->insert(/* ... */)) { echo '数据库错误:' . $wpdb->last_error; }
5. 开启调试模式排查隐藏错误
在wp-config.php中添加以下代码开启调试,错误会记录到wp-content/debug.log:
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true);
修正后的完整代码
<?php function save_logged_in(){ $user = wp_get_current_user(); if ($user->is_user_logged_in()){ $page_id = get_queried_object_id(); if ($page_id == 228){ global $wpdb; $table_name = $wpdb->prefix . 'session_capture'; $user_login = $user->user_login; $email = $user->user_email; $name = $user->user_firstname; $family = $user->user_lastname; $dt = current_time('mysql'); $insert_result = $wpdb->insert( $table_name, array( 'login_name' => $user_login, 'email' => $email, 'fname' => $name, 'lname' => $family, 'date' => $dt ) ); // 调试用,上线前删除 if (!$insert_result) { echo '数据库错误:' . $wpdb->last_error; } } } } // 注册短代码 add_shortcode('save_user_session', 'save_logged_in'); ?>
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

