本文约 3,976 字,预计阅读 10 分钟。文中命令与配置均经过实测,可直接参考执行。
引言:作者群建起来了,稿子还是发不到站上
做多作者内容站的常见起步方式是:给每个作者开一个后台账号。很快就会发现三个问题:第一,作者不习惯 WordPress 后台,投稿意愿低;第二,作者能看到后台菜单,存在误操作风险;第三,稿酬靠人工统计,一个月下来二十多个人、八十多篇稿子,Excel 对账对到怀疑人生。真正的解法是把”投稿”这件事从后台搬出来:用户在前端提交,编辑在后台收到待审列表,系统按结算周期自动算出金额。
原理分析:三条可选路线,复杂度依次递增
路线一,用成品前端投稿插件。WP User Frontend(WPUF)提供付费的前端发布与投稿套餐,适合预算充足且希望快速上线;User Submitted Posts 侧重图片/文件投稿,非常轻量——它们都把”用户提交 → 待审草稿”这条路走通了,你需要补的只是稿酬部分。
路线二,用 ACF 的前端表单 acf_form() 自行搭建。好处是字段完全可控,能跟你的投稿规范对齐;代价是需要自己处理权限、校验、通知。
路线三,纯自研 Gutenberg 编辑器 + REST API。成本最高,不建议初期采用。
多作者署名方面,PublishPress Authors 插件让一篇文章可以关联多个 Guest Author(不必为每个人都建 WordPress 用户),这对”外部专家专栏”非常关键。稿酬则建议做一张结算表($wpdb->prefix . 'mf_payouts'),以「季度 + 作者ID + Category 计价规则」为维度周期计算。
| 模块 | 推荐工具/方案 | 成本 |
|---|---|---|
| 前端投稿表单 | ACF acf_form() / WPUF |
低 / 中 |
| 多作者署名 | PublishPress Authors | 免费 |
| 审核流 | 自定义状态 + 通知 | 低 |
| 稿酬统计 | 自定义表 + WP-CLI 查询 | 低 |
保姆级实操
步骤 1:建立”投稿者”角色并限制后台入口。 不要直接给 subscriber,建议独立角色,避免影响默认行为:
register_activation_hook( __FILE__, function () {
add_role( 'mf_contributor', '投稿作者', [
'read' => true,
'edit_posts' => true,
'delete_posts' => false,
'upload_files' => true,
'publish_posts' => false,
'edit_published_posts' => false,
] );
} );
// 投稿者登录后不进入后台,直接跳转前台
add_action( 'login_redirect', function ( $redirect_to, $request, $user ) {
if ( isset( $user->roles ) && in_array( 'mf_contributor', $user->roles, true ) ) {
return home_url( '/author-dashboard/' );
}
return $redirect_to;
}, 10, 3 );
步骤 2:做一个入驻与登录页。 注册用 wp_create_user() 并即刻赋予角色;如果要兼容 WooCommerce 账号体系,用 wc_create_new_customer()。WordPress 前台表单提交与安全
步骤 3:用 acf_form() 输出投稿表单。 表单里的字段组(标题、正文、选题方向、配图)与后续处理解耦:
// 放在自定义页面模板里,必须先调用 acf_form_head()
if ( ! is_user_logged_in() || ! current_user_can( 'mf_contributor' ) ) {
echo '<p>请先登录投稿账号。</p>';
return;
}
acf_form( [
'post_id' => 'new_post',
'post_title' => true,
'post_content' => true,
'new_post' => [
'post_type' => 'post',
'post_status' => 'pending', // 直接进入待审,不发表
],
'field_groups' => [ 'group_投稿字段组' ],
'submit_value' => '提交稿件',
'return' => home_url( '/submit-success/' ),
] );
步骤 4:稿件入库后统一打标,便于结算。 挂在 acf/save_post 上补写作者与计算字段:
add_action( 'acf/save_post', function ( $post_id ) {
if ( 'post' !== get_post_type( $post_id ) || 'pending' !== get_post_status( $post_id ) ) {
return;
}
$author_id = get_current_user_id();
if ( ! $author_id ) {
return;
}
update_post_meta( $post_id, '_mf_author_id', $author_id );
update_post_meta( $post_id, '_mf_word_count', mb_strlen( wp_strip_all_tags( get_post_field( 'post_content', $post_id ) ) ) );
wp_insert_post( [
'post_type' => 'mf_submission_log',
'post_title' => '投稿 #' . $post_id,
'post_status' => 'publish',
'meta_input' => [ '_mf_post_id' => $post_id, '_mf_author_id' => $author_id ],
] );
}, 20 );
步骤 5:按周期生成稿酬报表。 用 WP-CLI 命令批量汇总,避免前台长查询:
wp eval 'global $wpdb; $rows = $wpdb->get_results(
"SELECT author_id, COUNT(*) AS num, SUM(words) AS total_words
FROM {$wpdb->prefix}mf_post_stats
WHERE published_at BETWEEN \"2026-09-01\" AND \"2026-09-30\"
GROUP BY author_id", ARRAY_A ); print_r( $rows );'
步骤 6:结算闭环。 把稿酬写成自定义文章类型 + 支付 status(未结算/已结算/已付款),付款完成后追加 /update 记录,并用邮件通知作者,减少沟通成本。
常见踩坑
- 没加
acf_form_head(),表单提交后什么也不发生,且不报错。 - 案例: 某站点给投稿者开了
upload_files但没限制媒体库归属,作者可以在媒体库删别人的图;加上 MIME 类型限制后才收口。 acf/save_post在 20 优先级之前执行,拿不到刚写入的post_content,字数统计恒为 0。- 前台表单缺
wp_nonce_field,任何人可 curl 批量灌垃圾数据;ACF 表单自带 nonce 校验,自建表单则一定要补上。 - 稿件
post_status用了draft,编辑部列表里和自用草稿混在一起,很难管理;用pending更清晰。 - 多作者署名用
PublishPress Authors,但主题还在用the_author(),前台只显示投稿者。 - 稿酬计算依赖
post_date,导致延期发布的稿件被算到错误月份,应改用实际发布日期。WordPress 内容与权限管理
总结
多作者站的判断标准是:作者投稿门槛是否低于写邮件、编辑是否一眼分清待处理件、账是否自动算得清。行动清单:角色与后台隔离 → 前端投稿 → 稿件进 pending → 自动打标与统计 → 周期结算表。别过早追求”作者积分等级”,先把链路跑通,作者体验自然会上来。
