WordPress 主题上架官方目录:审核卡在哪几个点

· wordpress · 阅读 15
摘要

WordPress 官方主题目录的审核比插件严得多。插件会放行一些灰色做法,主题基本不放。 我提交过两次,第一次被退回 11 条,第二次过。这篇把退回的意见整理一下。 一、所有输出必须转义 这是退回意见里占比最高的。 模板里 echo $p

WordPress 官方主题目录的审核比插件严得多。插件会放行一些灰色做法,主题基本不放。

我提交过两次,第一次被退回 11 条,第二次过。这篇把退回的意见整理一下。

一、所有输出必须转义

这是退回意见里占比最高的。

模板里 echo $post->post_title、echo get_option('blogname') 这种写法,一条都过不了。必须:

echo esc_html(get_the_title());
echo esc_url($url);
echo esc_attr($class);
echo wp_kses_post($content);

选哪个函数有讲究:

  • 纯文本用 esc_html()
  • URL 用 esc_url()
  • HTML 属性值用 esc_attr()
  • 允许部分 HTML 的正文用 wp_kses_post()
  • 写进 JS 的变量用 wp_json_encode()

退回意见里会精确到行号,我收到的那份列了 23 行。

麻烦但没得商量。审核员会一行一行看。

二、不能自己写 CSS 和 JS 的引入

上面 functions.php 那篇讲过,这里再说一遍,因为它是第二条最常被退的原因。

所有资源必须走 wp_enqueue_style() / wp_enqueue_script(),不能直接 echo 标签进 wp_head。

理由审核意见里也写了:插件需要知道主题加载了什么资源,才能做优化、合并、延迟加载。直接 echo 的,插件完全看不见。

三、主题里不能有业务功能

「Presentational, not functional」——这是官方原话。

被我删掉的东西包括:

  • 自定义文章类型的注册
  • SEO meta 输出(og:title、canonical)
  • 统计代码
  • 联系表单
  • 短代码

这些都得进插件。主题只管长什么样,不管产生什么数据。

我一开始想留 SEO 那块,因为不少付费主题都自带 SEO 模块。但官方目录是另一套标准,付费渠道不管这块。

四、钩子必须留

模板里那些看起来「反正没人用」的位置,官方要求必须留钩子:

do_action('before_content');
do_action('after_content');
apply_filters('theme_post_meta', $meta);

退回意见原话大意是:用户装插件后需要往这些位置塞东西,主题不给钩子等于把路堵死了。

我当时漏了三处:wp_footer 之前的 do_action('before_footer')、body 开标签后的 do_action('after_body_open')、文章列表循环外的 do_action('before_loop')。

补的方式很简单,就是加一行。但不知道要求的话,想不到要加。

五、无障碍那几条

这块近几年越来越严。最低要求:

  • 跳转链接(skip link):键盘用户按 Tab 能直接跳到正文,跳过导航
  • 所有图片 alt 属性不能空着——除非是纯装饰,那就 alt="" 加 aria-hidden="true"
  • 表单控件要有 label
  • 焦点样式不能 outline: none 就完事,得给个替代的可见状态
  • 颜色对比度至少 4.5:1(正文)

第四条我撞过。设计稿要求去掉输入框的默认蓝框,我就写了 outline: none。退回意见要求补一个 :focus-visible 样式替代。

对比度这条用工具查最快,浏览器开发者工具里检查元素,颜色那一栏会标对比度比值。

六、截图和许可证

这几项不影响代码,但会卡流程:

  • screenshot.png 必须 1200×900
  • 头部 License 必须写 GPL v2 或更高
  • 主题里用到的所有字体、图标、图片,许可证必须兼容 GPL,且要写进 readme.txt 的 Resources 段
  • 不能捆绑来自非 GPL 渠道的商业素材

第三条最容易忽略。我从免费图标库里拿了一套图标,那套标的是 MIT,可以用,但必须在 readme 里写明来源和许可证。第一次提交时没写,被退。

提交到过的状态

流程大致是:提交 zip → 自动检查 → 人工审核 → 给意见 → 修改重提 → 通过 → 上线。

我那次从提交到过,前后二十来天。中间退了两次,每次修改加等待大约一周。

如果只是自己用或者给客户做,别走官方目录。那条路适合真的想公开分发的场景。

自己用的主题,把安全做好、别写死路径、留好钩子就够了,前面那些无障碍和转义的细节,客户不会查,但你以后接手的人会感谢你。