在WordPress中实现前台投稿功能需要一些自定义代码和插件的帮助,因为WordPress默认并没有提供前台投稿的内置功能。
下面是一个基本的实现方法,包括一些PHP代码和必要的插件设置。但请注意,这只是一个起点,具体实现可能需要根据你的需求进行调整和优化。
步骤 1:安装必要的插件
首先,你需要安装并激活以下插件:
1. User Registration或 WP User Manager:用于处理用户注册和登录。
2. Frontend Submit或 WPFrontend Post Submission:用于在前端添加投稿功能。
这些插件可以帮助你快速搭建起前台投稿的基础框架。
步骤 2:创建前端投稿表单
在你的主题中创建一个新的页面模板(例如 “frontend-post.php”),并添加以下代码来创建一个投稿表单:
php
<?php
/* Template Name: Frontend Post Submission */
get_header();
?>
<div id="primary" class="content-area">
<main id="main" class="site-main">
<section class="post-submission">
<h1>投稿表单</h1>
<?php if (is_user_logged_in()) { ?>
<form id="frontend-post-form" method="post" action="">
<label for="post-title">标题</label>
<input type="text" id="post-title" name="post_title" required>
<label for="post-content">内容</label>
<textarea id="post-content" name="post_content" required></textarea>
<!-- 可选:添加分类和标签选择 -->
<!-- <label for="post-category">分类</label>
<select id="post-category" name="post_category">
<?php // 填充分类选项 ?>
</select>
<label for="post-tags">标签</label>
<input type="text" id="post-tags" name="post_tags" data-role="tagsinput"> -->
<input type="hidden" name="action" value="frontend_post_submit">
<input type="hidden" name="user_id" value="<?php echo get_current_user_id(); ?>">
<input type="hidden" name="post_type" value="post"> <!-- 或其他自定义文章类型 -->
<button type="submit">提交</button>
</form>
<?php } else { ?>
<p>请登录后投稿。</p >
<?php } ?>
</section>
</main>
</div>
<?php
get_footer();
?>
步骤 3:处理投稿表单提交
在你的主题的 “functions.php`”文件中添加以下代码来处理投稿表单的提交:
php
function frontend_post_submit() {
if (!is_user_logged_in()) {
wp_redirect(wp_login_url($_SERVER['REQUEST_URI']));
exit;
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$user_id = get_current_user_id();
$title = sanitize_text_field($_POST['post_title']);
$content = wp_kses_post($_POST['post_content']);
$post_type = sanitize_text_field($_POST['post_type']);
// 可选:处理分类和标签
// $category_id = sanitize_text_field($_POST['post_category']);
// $tags = explode(',', sanitize_text_field($_POST['post_tags']));
$post_data = array(
'post_title' => $title,
'post_content' => $content,
'post_type' => $post_type,
'post_status' => 'pending', // 或 'publish',根据你的需求
'post_author' => $user_id,
);
$post_id = wp_insert_post($post_data);
if ($post_id) {
// 可选:设置分类和标签
// wp_set_post_categories($post_id, array($category_id));
// wp_set_post_tags($post_id, $tags);
wp_redirect(home_url('/'));
exit;
} else {
wp_die('投稿失败,请重试。');
}
}
}
add_action('admin_post_nopriv_frontend_post_submit', 'frontend_post_submit');
add_action('admin_post_frontend_post_submit', 'frontend_post_submit');
步骤 4:自定义和测试
1. 自定义表单:根据需要自定义投稿表单的样式和功能。
2. 测试:创建一个测试账户,登录后尝试提交文章,确保一切正常工作。
3. 调整权限:根据你的需求调整用户权限,例如是否允许用户直接发布文章,还是需要将文章提交给管理员审核。
注意事项
安全性:确保对用户输入进行适当的清理和验证,以防止安全漏洞。
用户体验:提供清晰的反馈和错误消息,以改善用户体验。
扩展性:考虑未来可能需要添加的功能,如文件上传、自定义字段等。
以上代码提供了一个基本的前台投稿功能实现框架,但具体实现可能需要根据你的需求进行调整和优化。