使用ACF与PHP搭建在线交易市场遇报错及功能实现求助
解决代码报错与货币系统实现方案
一、先修复代码语法错误
你当前的代码存在语法问题,导致无法保存:
// get the current user id $user_id = get_current_user_id(); // get a field from the user $value = get_field('field_name', 'user_'.$user_id'); // 末尾多了一个单引号,属于语法错误
修正后的代码(可直接获取两种货币字段值):
// 获取当前登录用户ID $user_id = get_current_user_id(); // 获取用户的coins字段值 $user_coins = get_field('coins', 'user_' . $user_id); // 获取用户的leaves字段值 $user_leaves = get_field('leaves', 'user_' . $user_id);
保存这段修正后的代码,即可解决「Could not update snippet. The server did not send a valid response.」的错误。
二、前端展示用户货币数量
添加以下代码,通过短代码在页面/文章中展示当前用户的两种货币:
function show_user_currencies() { // 未登录时提示登录 if (!is_user_logged_in()) { return '<p>请先登录查看你的货币</p>'; } $user_id = get_current_user_id(); // 获取字段值,为空时默认设为0 $coins = empty(get_field('coins', 'user_' . $user_id)) ? 0 : get_field('coins', 'user_' . $user_id); $leaves = empty(get_field('leaves', 'user_' . $user_id)) ? 0 : get_field('leaves', 'user_' . $user_id); return "<p>你的金币:{$coins} | 你的叶子:{$leaves}</p>"; } // 注册短代码,在页面中插入[user_currencies]即可调用 add_shortcode('user_currencies', 'show_user_currencies');
三、实现货币兑换功能
1. 添加兑换逻辑代码
在Code Snippets中添加以下PHP代码(示例为1金币=2叶子的兑换比例,可自行调整):
function handle_currency_exchange() { // 仅处理POST请求 if ($_SERVER['REQUEST_METHOD'] !== 'POST') { return; } // 未登录用户直接返回错误 if (!is_user_logged_in()) { wp_send_json_error('请先登录再进行兑换'); } $user_id = get_current_user_id(); $exchange_type = sanitize_text_field($_POST['exchange_type'] ?? ''); $amount = intval($_POST['amount'] ?? 0); // 校验兑换数量合法性 if ($amount <= 0) { wp_send_json_error('兑换数量必须大于0'); } // 获取当前用户货币值,为空则默认0 $coins = empty(get_field('coins', 'user_' . $user_id)) ? 0 : get_field('coins', 'user_' . $user_id); $leaves = empty(get_field('leaves', 'user_' . $user_id)) ? 0 : get_field('leaves', 'user_' . $user_id); // 金币换叶子逻辑 if ($exchange_type === 'coins_to_leaves') { if ($coins < $amount) { wp_send_json_error('金币数量不足'); } update_field('coins', $coins - $amount, 'user_' . $user_id); update_field('leaves', $leaves + ($amount * 2), 'user_' . $user_id); wp_send_json_success('兑换成功!'); } // 叶子换金币逻辑 elseif ($exchange_type === 'leaves_to_coins') { if ($leaves < $amount) { wp_send_json_error('叶子数量不足'); } update_field('leaves', $leaves - $amount, 'user_' . $user_id); update_field('coins', $coins + ($amount / 2), 'user_' . $user_id); wp_send_json_success('兑换成功!'); } else { wp_send_json_error('无效的兑换类型'); } } // 注册AJAX钩子,处理兑换请求 add_action('wp_ajax_currency_exchange', 'handle_currency_exchange');
2. 添加兑换表单短代码
继续添加以下代码,生成兑换表单的短代码:
function exchange_form_shortcode() { ob_start(); ?> <div class="exchange-container"> <h3>货币兑换</h3> <div id="exchange-status" style="margin:10px 0;"></div> <form id="exchange-form"> <label>兑换类型:</label> <select name="exchange_type" required> <option value="coins_to_leaves">金币换叶子(1:2)</option> <option value="leaves_to_coins">叶子换金币(2:1)</option> </select> <br><br> <label>兑换数量:</label> <input type="number" name="amount" min="1" required> <br><br> <button type="submit">确认兑换</button> </form> </div> <script> document.getElementById('exchange-form').addEventListener('submit', function(e) { e.preventDefault(); const formData = new FormData(this); formData.append('action', 'currency_exchange'); fetch('<?php echo admin_url('admin-ajax.php'); ?>', { method: 'POST', body: formData }) .then(res => res.json()) .then(data => { const statusEl = document.getElementById('exchange-status'); if (data.success) { statusEl.style.color = 'green'; statusEl.textContent = data.data; // 1.5秒后刷新页面,更新货币显示 setTimeout(() => location.reload(), 1500); } else { statusEl.style.color = 'red'; statusEl.textContent = data.data; } }) .catch(() => { document.getElementById('exchange-status').textContent = '兑换出错,请重试'; }); }); </script> <?php return ob_get_clean(); } add_shortcode('exchange_form', 'exchange_form_shortcode');
在页面中插入[exchange_form]即可显示兑换表单。
注意事项
- 确保ACF插件已激活,
get_field和update_field是ACF的内置函数 - 兑换比例可自行修改代码中的倍数(如
$amount * 2) - 所有代码在Code Snippets中添加时,可选择「仅在前端运行」模式
内容的提问来源于stack exchange,提问作者Suchiiswar Paudmanabhan
相关产品推荐
相关产品推荐

