找到
1
篇与
Joe教程
相关的结果
-
Joe1.4再续前缘版「游客付费可见」Bug修复教程 title: 【一步搞定】Joe1.4再续前缘版「游客付费可见」Bug修复教程 tags: 教程,Joe主题,付费可见,游客支付,一键修复 category: 技术随笔 status: publish content: 1 问题简述 Joe1.4自带「付费可见」→游客支付成功→仍显示灰色遮罩,刷新也不出来。 2 修复思路(30秒看懂) ①支付时把游客IP写进订单表ip字段 ②文章渲染时用当前IP查订单status=1 ③命中→直接输出隐藏内容,无需登录 3 一键修复代码(复制即用) 把下面代码粘到主题文件public/function.php第1298行插入以下代码(搜pay view更快): //支持CDN function markdown_hide($content, $post, $login) { // 1. 复用你的 IP 获取逻辑(无需额外引入文件) function get_visitor_ip($type=0){ $ip = $_SERVER['REMOTE_ADDR']; if($type<=0 && isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) { foreach ($matches[0] AS $xip) { if (filter_var($xip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $xip; break; } } } elseif ($type<=0 && isset($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif ($type<=1 && isset($_SERVER['HTTP_CF_CONNECTING_IP']) && filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } elseif ($type<=1 && isset($_SERVER['HTTP_X_REAL_IP']) && filter_var($_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_X_REAL_IP']; } return $ip; } // 2. 数据库查询订单(适配 typecho_orders 表结构) $db = \Typecho_Db::get(); $prefix = $db->getPrefix(); $currentCid = $post->cid; $visitorIp = get_visitor_ip(); $showContent = false; $payment = null; // 登录用户:用 user_id 匹配订单(typecho_orders 表的 user_id 字段) if ($login) { $payment = $db->fetchRow($db->select() ->from($prefix . 'orders') ->where('content_cid = ?', $currentCid) // 文章ID匹配 ->where('user_id = ?', USER_ID) // 登录用户ID匹配 ->where('status = ?', 1) // 1=已支付(你的表状态字段) ->limit(1)); } // 游客:用 IP 匹配订单(typecho_orders 表的 ip 字段,已存游客IP) else { $payment = $db->fetchRow($db->select() ->from($prefix . 'orders') ->where('content_cid = ?', $currentCid) ->where('ip = ?', $visitorIp) // 直接用表中已存的 ip 字段匹配 ->where('status = ?', 1) ->limit(1)); }4 立即体验(照抄即可) 新建文章→编辑器切Markdown→复制下方整块→发布→无痕模式访问→支付0.01→刷新→隐藏内容自动出现! 隐藏内容,请前往内页查看详情5 解锁查看 隐藏内容,请前往内页查看详情