WordPress中将$wpdb的update方法写入函数内不生效如何解决?
问题核心原因
你犯了最基础的代码执行逻辑错误:$wpdb是WordPress的PHP全局对象,你把PHP数据库操作代码直接写到了前端JavaScript脚本块里,浏览器根本无法识别执行PHP代码,所以操作永远不会生效。
其他附加错误点
- 你写的where条件里用了大写
ID,但你的实际表字段是小写的id,大小写不匹配也会导致更新条件失效 - 你没有声明全局$wpdb对象,就算这段代码放在PHP块中执行也会报未定义对象的错误
- 前端CF7提交事件触发后必须通过AJAX请求调用后端PHP接口才能实现数据库更新,不能直接在JS里写PHP逻辑
正确实现方案
1. 注册后端AJAX处理接口
将以下代码添加到主题的functions.php文件中:
// 注册AJAX动作,兼容登录和未登录用户访问 add_action('wp_ajax_update_gen3_tvalue', 'update_gen3_tvalue_handler'); add_action('wp_ajax_nopriv_update_gen3_tvalue', 'update_gen3_tvalue_handler'); function update_gen3_tvalue_handler() { global $wpdb; // 可自行添加权限校验逻辑,比如校验CF7提交的nonce参数 $update_result = $wpdb->update( 'Gen3', array('tvalue' => 1), array('id' => 25), array('%d'), array('%d') ); if($update_result !== false) { wp_send_json_success('更新成功'); } else { wp_send_json_error('更新失败'); } } // 向前端输出AJAX请求所需参数 add_action('wp_enqueue_scripts', 'add_custom_ajax_var'); function add_custom_ajax_var() { wp_localize_script('jquery', 'custom_ajax_obj', array( 'ajax_url' => admin_url('admin-ajax.php') )); }
2. 修改前端footer的JS逻辑
把你的原有代码替换为以下内容,改为通过AJAX调用后端接口执行数据库更新:
add_action( 'wp_footer', 'mycustom_wp_footer' ); function mycustom_wp_footer() { ?> <script type="text/javascript"> var wpcf7Elm = document.querySelectorAll( '.wpcf7' ); wpcf7Elm.forEach(function(formr){ formr.addEventListener( 'wpcf7submit', function( event ) { // 发送AJAX请求触发后端更新逻辑 fetch(custom_ajax_obj.ajax_url, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, body: 'action=update_gen3_tvalue' }) .then(res => res.json()) .then(data => { console.log(data.message); }); }, false ); }) </script> <?php }
内容的提问来源于stack exchange,提问作者Entity_45
相关产品推荐
相关产品推荐

