我给自己的博客做了台「广告位自动售卖机」:WP Self Ad 插件

访客自己挑格子、自己付钱、到期自动下线 —— 站长要做的,只是设置位置和价格。

写这个插件的起因很朴素:我的博客想卖广告位,但手工卖太累了。

一、手工卖广告位,到底累在哪

如果你也在博客上挂过广告位,大概经历过这几件事:

  • 有人在评论区或者 QQ 问「广告位多少钱」,你得手动去查还空着几个;
  • 谈妥了,你要打开主题的代码文件或者小工具,把对方的图片和链接贴进去;
  • 到期了,没有提醒,要么你自己记在小本子上,要么让广告一直挂着白送;
  • 一个人还好,广告位多了、买的人多了,谁付了、谁没付、哪个格子到哪天,全靠脑子记。

说白了,这活儿本身不复杂,但它每天都要占你一点注意力。而 WordPress 生态里,绝大多数「广告位插件」解决的是「怎么把广告显示出来」,很少有人解决「怎么把它卖出去」。

所以我把这套流程写成了一个插件:WP Self Ad。

二、它把广告位变成了「格子」

核心思路就一句话:把广告位切成一格一格的,每格标好价格,空着的格子直接对外招租。

样式参考:测试自助广告-墨桅博客

前台看到的效果是这样:还没卖出去的格子显示「某某广告招租 / ¥50.00/月起」,访客点一下,弹出购买窗口,填内容、选天数、选支付方式,付完钱广告自动上线、这个格子自动被占用,不再对外出售。

到了期,由定时任务自动下线,位置释放给下一位。

整个过程不需要你和买家说一句话。你要做的只有开局那一下:设置好位置和价格。

三、一条完整的自助流程

  1. 站长在后台配置广告位:位置、每行几格、月单价、允许买几天;
  2. 访客在前台看到空闲格子,点「招租」的格子;
  3. 填写广告内容 → 选投放时长 → 选支付方式 → 付款;
  4. 支付成功自动上线,位置立刻被占用;
  5. 到期后自动下线,位置重新招租。

第 3 到第 5 步之间,全程不需要人工介入。

四、主要特性

特性

说明

🎯 自助购买

访客点空格子即可下单,无需联系站长

🎨 5 种广告位

大横幅 / 小横幅 / 迷你横幅 / 方块横幅 / 文字广告,也可自定义新类型

💰 按天计价

金额 = 月单价 × 投放天数 ÷ 30,只在服务端计算,前端改不了

💳 多渠道支付

支付宝官方、易支付;付款方式支持支付宝 / 微信 / QQ 钱包

🔀 多通道自动选路

同时配了多个通道时按优先级自动挑(支付宝官方优先,其次易支付)

🔒 并发安全

下单全程数据库事务 + 行锁,同一格子不会被两个人同时买到

⏰ 自动到期

每小时检查一次,过期广告自动下线并释放位置

🛠️ 站长手动管理

后台可自定义广告内容、手动上下架、改投放天数

📱 响应式

窄屏自动换行、字号自适应,手机上不会挤变形

🌐 零依赖

纯 PHP 手写,不需要 Composer / Node,不需要任何第三方库

五、后台你能控制什么

安装后会多出一个「自助广告」一级菜单,里面 6 个页面:仪表盘、广告位设置、广告管理、订单管理、支付设置、关于插件。

其中广告管理是我自己用得最多的一个页面:

  • 站长广告和用户买的广告放在一起管,只是用 source 区分来源;
  • 广告状态只有三种:在线 / 已下架 / 已过期,下架等于立刻释放格子,不会影响已付款的订单;
  • 站长可以改自己那条广告的投放天数;但用户买的广告只能改内容,位置和天数动不了(不然就和订单对不上了);
  • 对一条已经过期的广告点「上架」,会按原来的投放天数自动续期 —— 避免出现「点上架了,结果一秒后又消失」这种让人怀疑按钮坏了的情况。

六、支付这块,我花了最多心思

支付是两个容易翻车的地方:钱收不到、以及出了问题不知道为什么。

第一,付款方式和支付通道是分开的两层。 用户在收银台选的是「支付宝 / 微信 / QQ 钱包」,而实际动用哪条接口(支付宝官方还是易支付)由插件按优先级自动决定。将来接入新通道,不用改用户看到的东西。

第二,也是我最想推荐的一个功能:易支付接口自检。

对接过易支付的人都懂这种绝望:付款页面弹出「订单创建失败」,但你根本看不到服务商到底说了什么,因为它把错误信息写在返回内容里,前端只看到一个失败。

所以我做了个自检工具:它会用 0.01 元的探测单真实请求一次接口,把 HTTP 状态码、返回的 code、服务商的原文 全部抓回来显示在后台,并给出「大概是哪一步配置错了」的建议。

从那以后排查支付问题,从「猜半天」变成了「看一眼」。

七、一些看不见、但很重要的细节

如果你也写代码,可能会关心这几条:

  • 金额只在服务端算,前端传什么价格都不作数;
  • 下单走事务 + 行锁,加锁顺序固定(先广告位、再订单),避免两个人抢同一个格子、也避免死锁;
  • 支付回调会校验商户号和金额,到账逻辑(mark_paid())全程幂等 —— 重复通知不会重复发货;
  • 所有时间统一用站点时区,不在 SQL 里用 NOW(),避免服务器时区和站点时区不一致导致「到期时间差 8 小时」;
  • 前台输出统一转义,后台写操作全部走 nonce 校验。

另外插件里有几个专门为「之后好维护」做的设计:表结构的唯一权威来源集中在一个方法里,升级时只做加法、绝不删字段;数据库报错会存下来在后台能直接看到原文 —— 因为站长通常拿不到服务器日志。

八、上手只要 4 步

  1. 配置广告位:后台 → 自助广告 → 广告位设置,填名称、每行容量、月单价、可购买天数;
  1. 配置支付:后台 → 自助广告 → 支付设置,至少配通一条通道(支付宝官方填 AppID 和密钥;易支付填接口域名、PID、密钥),配完点一下「接口自检」;
  2. 把短代码放到页面上
  3. 自己试买一次:用任意登录账号点一下「招租」的格子,把流程走完。

短代码里 slot 就是广告位的标识,想加新广告位,在后台新建一个、填你自己的标识就行。

九、它适合谁

  • 博客 / 站点上已经有流量,想把广告位半自动化地卖出去;
  • 我用的是子比主题(zibll),或者任意 WordPress 主题(插件不依赖主题);
  • 希望不装 Composer、不装一堆东西,一个 zip 传上去就能用。

不适合:想要程序化广告(Google AdSense 那类自动匹配投放)的场景 —— 这是给「人工谈好的广告位」做电商化的,两件事。

十、目前还没做,但在计划里

我不想把话说满,下面是确实还没做的部分:

  • 广告内容审核 —— 现在付款后立即上线,用户投什么就显示什么。这是下一步最优先要补的(人工审核环节);
  • 用户中心 —— 「我的广告」页面,让买家自己看剩余天数和续期;
  • 用户端图片上传 —— 目前填的是图片 URL;
  • 下单限流 —— 防刷单。

在这之前,建议自己或在后台多留意上线的广告内容 —— 免得哪天被迫处理投诉。

十一、获取方式

  • 下载最新版:wp-self-ad-v1.4.0.zip

安装:WordPress 后台 → 插件 → 安装插件 → 上传插件 → 选 zip → 安装 → 启用。

启用后会自动创建数据表、写入 5 种默认广告位、注册支付回调地址。

⚠️ 两点提醒:

  1. 如果安装后页面 404 或提示下单失败,去 设置 → 固定链接 点一下「保存更改」,刷新一次伪静态规则;
  1. 卸载插件会永久删除数据表和数据!只是想停用的话,请选「停用」,别选「删除」。

十二、最后

这个插件从第一版到现在已经迭代了十几个小版本,中间修过的坑都写在了仓库的 docs/ 目录里(面向非专业读者,讲的是「为什么要这么改」,而不只是「改了啥」)。

它不算复杂,也没什么黑科技 —— 只是把一件琐碎的事做成了流程。如果你的站点也在卖广告位,欢迎拿去用;有问题或者想要什么功能,到 jetmast.com 留言告诉我。

作者:墨桅(JetMast) 博客:https://jetmast.com 邮箱:Email@5so.cc 授权:GPL-2.0+(自由软件,可再发布与修改)

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容