访客自己挑格子、自己付钱、到期自动下线 —— 站长要做的,只是设置位置和价格。
写这个插件的起因很朴素:我的博客想卖广告位,但手工卖太累了。
一、手工卖广告位,到底累在哪
如果你也在博客上挂过广告位,大概经历过这几件事:
- 有人在评论区或者 QQ 问「广告位多少钱」,你得手动去查还空着几个;
- 谈妥了,你要打开主题的代码文件或者小工具,把对方的图片和链接贴进去;
- 到期了,没有提醒,要么你自己记在小本子上,要么让广告一直挂着白送;
- 一个人还好,广告位多了、买的人多了,谁付了、谁没付、哪个格子到哪天,全靠脑子记。
说白了,这活儿本身不复杂,但它每天都要占你一点注意力。而 WordPress 生态里,绝大多数「广告位插件」解决的是「怎么把广告显示出来」,很少有人解决「怎么把它卖出去」。
所以我把这套流程写成了一个插件:WP Self Ad。
二、它把广告位变成了「格子」
核心思路就一句话:把广告位切成一格一格的,每格标好价格,空着的格子直接对外招租。
样式参考:测试自助广告-墨桅博客
前台看到的效果是这样:还没卖出去的格子显示「某某广告招租 / ¥50.00/月起」,访客点一下,弹出购买窗口,填内容、选天数、选支付方式,付完钱广告自动上线、这个格子自动被占用,不再对外出售。
到了期,由定时任务自动下线,位置释放给下一位。
整个过程不需要你和买家说一句话。你要做的只有开局那一下:设置好位置和价格。
三、一条完整的自助流程
- 站长在后台配置广告位:位置、每行几格、月单价、允许买几天;
- 访客在前台看到空闲格子,点「招租」的格子;
- 填写广告内容 → 选投放时长 → 选支付方式 → 付款;
- 支付成功自动上线,位置立刻被占用;
- 到期后自动下线,位置重新招租。
第 3 到第 5 步之间,全程不需要人工介入。
四、主要特性
|
特性 |
说明 |
|
🎯 自助购买 |
访客点空格子即可下单,无需联系站长 |
|
🎨 5 种广告位 |
大横幅 / 小横幅 / 迷你横幅 / 方块横幅 / 文字广告,也可自定义新类型 |
|
💰 按天计价 |
金额 = 月单价 × 投放天数 ÷ 30,只在服务端计算,前端改不了 |
|
💳 多渠道支付 |
支付宝官方、易支付;付款方式支持支付宝 / 微信 / QQ 钱包 |
|
🔀 多通道自动选路 |
同时配了多个通道时按优先级自动挑(支付宝官方优先,其次易支付) |
|
🔒 并发安全 |
下单全程数据库事务 + 行锁,同一格子不会被两个人同时买到 |
|
⏰ 自动到期 |
每小时检查一次,过期广告自动下线并释放位置 |
|
🛠️ 站长手动管理 |
后台可自定义广告内容、手动上下架、改投放天数 |
|
📱 响应式 |
窄屏自动换行、字号自适应,手机上不会挤变形 |
|
🌐 零依赖 |
纯 PHP 手写,不需要 Composer / Node,不需要任何第三方库 |
五、后台你能控制什么
安装后会多出一个「自助广告」一级菜单,里面 6 个页面:仪表盘、广告位设置、广告管理、订单管理、支付设置、关于插件。
其中广告管理是我自己用得最多的一个页面:
- 站长广告和用户买的广告放在一起管,只是用
source区分来源;
- 广告状态只有三种:在线 / 已下架 / 已过期,下架等于立刻释放格子,不会影响已付款的订单;
- 站长可以改自己那条广告的投放天数;但用户买的广告只能改内容,位置和天数动不了(不然就和订单对不上了);
- 对一条已经过期的广告点「上架」,会按原来的投放天数自动续期 —— 避免出现「点上架了,结果一秒后又消失」这种让人怀疑按钮坏了的情况。
六、支付这块,我花了最多心思
支付是两个容易翻车的地方:钱收不到、以及出了问题不知道为什么。
第一,付款方式和支付通道是分开的两层。 用户在收银台选的是「支付宝 / 微信 / QQ 钱包」,而实际动用哪条接口(支付宝官方还是易支付)由插件按优先级自动决定。将来接入新通道,不用改用户看到的东西。
第二,也是我最想推荐的一个功能:易支付接口自检。
对接过易支付的人都懂这种绝望:付款页面弹出「订单创建失败」,但你根本看不到服务商到底说了什么,因为它把错误信息写在返回内容里,前端只看到一个失败。
所以我做了个自检工具:它会用 0.01 元的探测单真实请求一次接口,把 HTTP 状态码、返回的 code、服务商的原文 全部抓回来显示在后台,并给出「大概是哪一步配置错了」的建议。
从那以后排查支付问题,从「猜半天」变成了「看一眼」。
七、一些看不见、但很重要的细节
如果你也写代码,可能会关心这几条:
- 金额只在服务端算,前端传什么价格都不作数;
- 下单走事务 + 行锁,加锁顺序固定(先广告位、再订单),避免两个人抢同一个格子、也避免死锁;
- 支付回调会校验商户号和金额,到账逻辑(
mark_paid())全程幂等 —— 重复通知不会重复发货;
- 所有时间统一用站点时区,不在 SQL 里用
NOW(),避免服务器时区和站点时区不一致导致「到期时间差 8 小时」;
- 前台输出统一转义,后台写操作全部走 nonce 校验。
另外插件里有几个专门为「之后好维护」做的设计:表结构的唯一权威来源集中在一个方法里,升级时只做加法、绝不删字段;数据库报错会存下来在后台能直接看到原文 —— 因为站长通常拿不到服务器日志。
八、上手只要 4 步
- 配置广告位:后台 → 自助广告 → 广告位设置,填名称、每行容量、月单价、可购买天数;
- 配置支付:后台 → 自助广告 → 支付设置,至少配通一条通道(支付宝官方填 AppID 和密钥;易支付填接口域名、PID、密钥),配完点一下「接口自检」;
- 把短代码放到页面上
- 自己试买一次:用任意登录账号点一下「招租」的格子,把流程走完。
短代码里 slot 就是广告位的标识,想加新广告位,在后台新建一个、填你自己的标识就行。
九、它适合谁
- 博客 / 站点上已经有流量,想把广告位半自动化地卖出去;
- 我用的是子比主题(zibll),或者任意 WordPress 主题(插件不依赖主题);
- 希望不装 Composer、不装一堆东西,一个 zip 传上去就能用。
不适合:想要程序化广告(Google AdSense 那类自动匹配投放)的场景 —— 这是给「人工谈好的广告位」做电商化的,两件事。
十、目前还没做,但在计划里
我不想把话说满,下面是确实还没做的部分:
- 广告内容审核 —— 现在付款后立即上线,用户投什么就显示什么。这是下一步最优先要补的(人工审核环节);
- 用户中心 —— 「我的广告」页面,让买家自己看剩余天数和续期;
- 用户端图片上传 —— 目前填的是图片 URL;
- 下单限流 —— 防刷单。
在这之前,建议自己或在后台多留意上线的广告内容 —— 免得哪天被迫处理投诉。
十一、获取方式
- 下载最新版:
wp-self-ad-v1.4.0.zip
- 仓库地址:Gitee:墨桅・JetMast (jetmast) – Gitee.com
- GitHub:JetMast (JetMast)
安装:WordPress 后台 → 插件 → 安装插件 → 上传插件 → 选 zip → 安装 → 启用。
启用后会自动创建数据表、写入 5 种默认广告位、注册支付回调地址。
⚠️ 两点提醒:
- 如果安装后页面 404 或提示下单失败,去 设置 → 固定链接 点一下「保存更改」,刷新一次伪静态规则;
- 卸载插件会永久删除数据表和数据!只是想停用的话,请选「停用」,别选「删除」。
十二、最后
这个插件从第一版到现在已经迭代了十几个小版本,中间修过的坑都写在了仓库的 docs/ 目录里(面向非专业读者,讲的是「为什么要这么改」,而不只是「改了啥」)。
它不算复杂,也没什么黑科技 —— 只是把一件琐碎的事做成了流程。如果你的站点也在卖广告位,欢迎拿去用;有问题或者想要什么功能,到 jetmast.com 留言告诉我。
作者:墨桅(JetMast) 博客:https://jetmast.com 邮箱:Email@5so.cc 授权:GPL-2.0+(自由软件,可再发布与修改)








暂无评论内容