使用WP User Frontend动作钩子,基于原文章标题创建另一自定义文章
解决方案
看起来你已经找对了核心思路,只需要补全代码并修正几个细节就能实现需求。下面是完整的可运行代码,我会逐部分给你解释:
// 优先使用WP User Frontend官方提交后钩子(如果你的自定义`create_whiteboard_hook`已正确触发,也可以保留原钩子) add_action('wpuf_after_insert_post', 'create_whiteboard', 10, 3); function create_whiteboard( $form_id, $post_id, $form_settings ) { // 获取原文章对象,避免直接覆盖传入的$post_id变量 $original_post = get_post($post_id); if ( !$original_post ) { return; // 原文章不存在的话直接退出,防止报错 } // 准备次级文章的创建参数 $whiteboard_args = array( 'post_type' => 'whiteboard', // 你的次级自定义文章类型 'post_title' => $original_post->post_title, // 直接沿用原文章标题 'post_status' => 'publish', // 按需调整状态,比如改成'draft'就是草稿 'post_author' => $original_post->post_author, // 沿用原文章作者 'post_content' => '' // 如果需要复制原文章内容,这里可以改成$original_post->post_content ); // 插入次级文章,用新变量存储ID避免冲突 $new_whiteboard_id = wp_insert_post($whiteboard_args); // 可选操作:给两篇文章添加关联标记,方便后续管理 if ( $new_whiteboard_id ) { add_post_meta($new_whiteboard_id, 'linked_original_post', $post_id); add_post_meta($post_id, 'linked_whiteboard_post', $new_whiteboard_id); } }
关键细节说明:
- 钩子选择:我用了WP User Frontend官方提供的
wpuf_after_insert_post钩子,它会在表单提交成功创建原文章后自动触发,比自定义钩子更稳定。如果你的create_whiteboard_hook已经绑定到插件的提交流程,也可以保留原钩子不变。 - 变量安全:特意用
$new_whiteboard_id存储新文章的ID,避免覆盖函数参数里的原文章$post_id,防止后续逻辑出错。 - 标题获取:通过
get_post($post_id)拿到完整的原文章对象,再提取post_title,确保能准确获取到标题内容。 - 可选关联:添加自定义字段可以让两篇文章建立关联,方便你后续在后台或前端快速找到对应的文章。
测试注意事项:
- 确认你的次级自定义文章类型
whiteboard已经正确注册到WordPress中。 - 提交测试文章后,去后台的
whiteboard文章列表检查是否生成了对应标题的新文章。 - 如果需要复制原文章的内容或其他字段,直接在
$whiteboard_args里补充对应参数即可。
内容的提问来源于stack exchange,提问作者Paul VI
相关产品推荐
相关产品推荐

