WordPress作为全球最流行的内容管理系统,通常用户都是在后台发布文章。但有时我们需要在前台实现发文功能,比如创建投稿系统或简化发布流程。本文将介绍几种实现WordPress前台发文的代码方法。
方法一:使用wp_insert_post函数
最基础的方法是直接调用WordPress的核心函数wp_insert_post()
:
if(isset($_POST['submit_post'])){
$new_post = array(
'post_title' => sanitize_text_field($_POST['post_title']),
'post_content' => wp_kses_post($_POST['post_content']),
'post_status' => 'pending', // 设置为待审核
'post_author' => get_current_user_id(),
'post_type' => 'post'
);
$post_id = wp_insert_post($new_post);
if($post_id){
// 成功插入文章后的操作
echo '文章已提交,等待审核!';
}
}
方法二:使用前端表单结合AJAX
更安全的方式是使用AJAX提交:
// 前端表单
<form id="frontend-post-form">
<input type="text" name="post_title" required>
<textarea name="post_content" required></textarea>
<input type="submit" value="提交文章">
</form>
// JavaScript
jQuery('#frontend-post-form').submit(function(e){
e.preventDefault();
jQuery.ajax({
url: frontend_ajax.ajaxurl,
type: 'POST',
data: {
action: 'frontend_post_submit',
title: jQuery('input[name="post_title"]').val(),
content: jQuery('textarea[name="post_content"]').val(),
security: frontend_ajax.security
},
success: function(response){
alert(response.data.message);
}
});
});
// PHP处理
add_action('wp_ajax_frontend_post_submit', 'handle_frontend_post_submit');
function handle_frontend_post_submit(){
check_ajax_referer('frontend_post_nonce', 'security');
$post_id = wp_insert_post(array(
'post_title' => sanitize_text_field($_POST['title']),
'post_content' => wp_kses_post($_POST['content']),
'post_status' => 'draft',
'post_author' => get_current_user_id()
));
if(!is_wp_error($post_id)){
wp_send_json_success(array('message' => '文章已保存为草稿'));
}else{
wp_send_json_error(array('message' => '发布失败'));
}
}
方法三:使用插件简化流程
如果不想写代码,可以考虑使用现成插件:
- User Submitted Posts - 简单的前台投稿插件
- Gravity Forms - 强大的表单构建器,可与文章发布集成
- Frontend Publishing Pro - 专业的前台发布解决方案
安全注意事项
- 始终对用户输入进行验证和清理(sanitize_text_field, wp_kses_post等)
- 使用nonce防止CSRF攻击
- 限制未登录用户或特定用户角色的访问权限
- 考虑设置默认状态为”pending”或”draft”而非直接发布
通过以上方法,你可以根据项目需求灵活实现WordPress前台发文功能,既可以是简单的投稿系统,也可以是复杂的内容创作平台。