因为前不久冠状病毒疫情爆发,想着为抗击病毒做点贡献,所以开发了一个WordPress插件想要提交到WordPress的插件库。这个插件叫Corona Virus Data,能够在任何WordPress站点的文章、页面甚至侧边栏显示冠状病毒的确诊、死亡和治愈人数。
这次提交WordPress插件的经历,可谓是较为曲折的,现记录下来大致流程和中间遇到的坑,之后再由提交,可能会顺利点。
大概的流程:
- 准备文件、账号
- 提交人工审核
- 审核通过 SVN提交
- 插件入库
准备文件、账号
文件包括插件的所有文件打包成zip;
注册一个WordPress.org的账号;
事先设计好插件的图标和banner。
插件文件当然是必须的,但是通常我们新手会不太重视Readme.txt这个文件,这个文件非常重要,WordPress插件审核团队经常会因为Readme.txt的问题拒绝一个插件,或者打回修改,所以在写这个文件的时候必须认真,包括但不限于插件的名称、版本、兼容Wordpress版本、版权证书、修改记录等等,WordPress专门为Readme开设了一个验证器:
https://wordpress.org/plugins/developers/readme-validator/
强烈建议将自己写的Readme粘贴到这个验证器通过之后再提交审核。
WordPress官方提供了一个标准Readme.txt参考,如下:
https://wordpress.org/plugins/readme.txt
Readme.txt的内容,将来也会成为在WordPress插件网站页面上的内容。
提交人工审核
提交地址如下:
https://wordpress.org/plugins/developers/add/
需要将插件文件打包成zip,上传即可。在这个页面也能看到还有多少等待审核的插件。
插件包无需包含图标、Banner和截图。但插件中必须包含Readme.txt、插件同名php文件,index.php,这些文件必须放插件根目录。
提交之后你会收到封邮件,大致就是告诉你,插件已经收到,耐心等待审核通过。这段时间你不能做什么,除了保证你在注册Wordpress.org时候的邮箱畅通以外,只能耐心等待审核结果email。
当然,审核结果有两种情况,如果通过,则会收到
[WordPress Plugin Directory] {plugin name} has been approved!
这样的邮件。如果不通过,邮件内会详细说明具体原因,那就只能按照问题修改,再次提交。
值得注意的是,再次提交插件不需要从网页入口上传插件,只需要在邮件回复中附上修改后的插件的zip压缩包即可。
审核通过 SVN提交
在通知你审核通过的邮件内,会附有一个SVN地址,你的目前的插件(文件包括以后的更新),都是通过这个SVN提交进入Wordpress网站。Wordpress工作人员不会为你提交插件。
通俗点讲,SVN类似于“手动云同步盘”,当你本地修改、增删了文件,可以用一个新的版本号提交到WordPress服务器上作为新版,你的用户在你提交后就会收到更新通知,当他们更新插件的时候,你所提交的新内容就会下载到他们的WordPress里。
WordPress提供给你的SVN目录结构是不能随意修改的,完整的插件SVN目录应该是下面这样:
../
/assets/ //用于存放图标、banner、截图。
/branches/ //插件的分枝版本,通常我们用不到。
/tags/ //插件的旧版本,以往版本,不建议累积。
/trunk/ //插件主目录,进去必须包含同名php和Readme.txt
assets
assets这个目录用于存放插件的一些形象设计,包含Banner、图标和截图。
图标和Banner虽然要到插件审核通过后才会用到,但建议提前构思好,以后会省很多精力。
Banner
文件命名
- 普通 Banner: banner-772×250.(jpg|png)
- 普通 Banner (RTL): banner-772×250-rtl.(jpg|png)
- 高清 (Retina): banner-1544×500.(jpg|png)
- 高清 (Retina RTL): banner-1544×500-rtl.(jpg|png)
RTL的意思是从右至左,因为有一些插件需要翻译成例如波斯语这类从右至左书写的语言,在地域设置成RTL语言的时候,就会读取RTL图片文件。
高清和RTL都不是必须的,但是如果你没有普通banner,插件的主也就不会显示Banner。
高清屏幕上会优先载入高清图片,图片可以是png也可以是jpg,根据图片内容的复杂程度选择格式。
图标
文件命名
- 普通: icon-128×128.(png|jpg)
- 高清 (Retina): icon-256×256.(png|jpg)
- SVG: icon.svg
图标也不是必须的,如果任何图标文件都没有,插件页面会显示类似Gravatar那样的随机图标。
截图
文件名
- screenshot-1.(png|jpg)
- screenshot-2.(png|jpg)
截图也是png或jpg皆可,但是必须在Readme.txt声明好才能生效。
branches
branches通常我们是不会去使用的, 并且WordPress.org也不会去读取他,在多人团队里,如果你做出一些新的修改但拿不准是不是合适,可以把新的修改放在branches 里 作为分枝版本供别的开发者去验证使用,通常像我这样的One Man Band是不会去用它的,因为如果有分枝,我自己在本地就能建很多。
tags
tags目录是供你存放之前版本插件的地方,这样做唯一的好处是,当你的新版本bug太多,你的用户可以在Wordpress插件页面里选择下载老版本使用,比如说插件的1.0版本,应该存放在 tags/1.0/,插件的2.3版本,应该存放在tags/2.3/ 依然是直接插件文件放进去,不加插件名称目录,不压缩。
没有必要任何旧版本都往Tags里丢,尽量把最新版做好即可。插件的版本控制建议使用数字而不是类似于”pro“ ”高清豪华版“ ”完整版“ 这样不容易分辨顺序的版本号。
trunk
trunk也就是放你目前最新版插件的地方,用户在插件库里下载到的就是这个里面的版本。
trunk目录下直接放插件的文件,不能加插件名目录,比如:
trunk/corona-virus-data/README.txt
这样是错误的,正确的应该是:
trunk/README.txt
强烈不建议直接在trunk目录对插件进行修改和测试,只有在你测试没有问题了,准备上传的时候,才把文件拷贝到trunk目录里进行 SVN commit。
翻译
我做的插件、主题,基本能翻译的字段,我都会按I18n标准进行可翻译处理,这样的好处是当歪果仁需要这个插件的时候,只需要做对应的语言包就能正常使用,完全不需要修改任何代码。
我最初存在一个误区,以为插件包里的 languages/目录必须提供其他语言的语言文件才行,但是后来发现根本不需要。插件内只需要有 “language/插件名.pot”这个供翻译的文件就行。
WordPress的翻译是由另一个完全分离的网站管理的: https://translate.wordpress.org/
当插件上传后被扫描出可供多语言翻译,在Translate那边就会出现在线版翻译界面,你可以对每一个字段的各种语言做“建议”,建议以后,由WP的翻译编辑审核批准了,翻译文件会自动推送给相应语言的用户。
虽然WordPress的说法是,翻译人员大部分都是有工作的志愿者,但是提交翻译等待审核的时间实在是太长了,基本上小众冷门一点的语言从插件上架到插件死的那天,估计都没有编辑会去看。即便是像冠状病毒这样现在全球都在关注的话题。
插件作者可以在 这里发帖 申请获得自己插件的翻译编辑权限,但是其时效也得分国家地区,比如我申请了简体中文和繁体中文的翻译编辑,时至今日,台湾繁体中文任然没有任何人给我回应。有志愿者帮我翻译了波斯文和希腊语,但是依然没有任何编辑来审核。
如果你仅仅希望依靠社区志愿者将你的插件翻译成各国语言,那还是洗洗睡吧。
注意事项
翻译自: https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/
- 插件必须遵循GNU协议,最好能遵循GPLv2协议
- 开发人员对内容和文件负责。使用第三方服务必须遵循使用条款,否则可能会被拒。
- 必须始终提供稳定版本(Stable Version)。
- 代码必须是人类可读,不能使用奇怪的变量。
- 不允许付费解锁的功能。
- 不允许仅以验证许可或者秘钥为目的的第三方服务。
- 未征得用户同意,不允许跟踪用户行为和与外部服务器通讯。
- 不允许通过第三方系统发送可执行代码。
- 不得做任何非法、不诚实、不道德的操作。包括欺骗性SEO。
- 不得在未征得用户许可的情况下显示外部链接。
- 不得劫持仪表盘。
- 面向公众的页面(Reame.txt)不得包含垃圾信息,不得恶意竞争
- 插件必须使用WordPress已包含的库
- 避免频繁提交插件
- 新的版本号必须是递增的。
- 提交时插件必须为完整的。
- 插件必须尊重商标、版权和项目名。
- 插件审核工作人员将保留禁用、删除插件的权利。
我的插件本来已经通过审核一段时间了,但是期间使用了一个韩国人自己做的API没有“使用条款”和”隐私政策“文档,从而导致我的插件被停当了几天。
唯一沟通的方式是给plugins@wordpress.org发邮件,而他们的回复速度真的是……一言难尽。
所以还是尽量遵循他们的规则,减少出问题的几率。
@科技本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可.
2 评论
沈唁志
2020年4月7日trunk中是没有同名php和readme的。
Duke
2020年4月7日trunk对应的是development 版本,这里必须要是一套完整的插件文件,所以同名php和readme是必须的。