wordpress允许用户在前端提交帖子

方法一:wordpress允许用户在前端提交帖子页面

如何创建wordpress允许用户在前端提交帖子页面

要创建一个允许用户在前端提交帖子的页面,您需要使用WordPress的内置函数来创建一个表单,并处理表单提交。以下是一个简单的步骤和示例代码:

  1. 创建一个表单页面模板(例如 submit-post.php)。
  2. 在表单中使用 <form> 标签,并设置 action 和 method 属性指向自身或一个专门的处理脚本。
  3. 使用 WordPress 的 nonce 系统来防止跨站请求伪造(CSRF)攻击。
  4. 在表单提交后,检查 nonce 是否有效,并处理表单数据。

示例代码:

// submit-post.php
<?php
get_header();
?>
 
<form action="<?php echo esc_url( home_url( '/' ) ); ?>wp-admin/admin-ajax.php" method="post">
    <input type="hidden" name="action" value="submit_post">
    <?php wp_nonce_field( 'submit_post', 'submit_post_nonce' ); ?>
 
    <label for="post_title">标题:</label>
    <input type="text" id="post_title" name="post_title"><br><br>
 
    <label for="post_content">内容:</label>
    <textarea id="post_content" name="post_content"></textarea><br><br>
 
    <input type="submit" value="提交">
</form>
 
<?php
get_footer();
?>

然后,你需要创建一个 AJAX 处理脚本来处理表单提交:

// functions.php 或其他插件/主题的 PHP 文件中
add_action( 'wp_ajax_nopriv_submit_post', 'my_submit_post_function' );
add_action( 'wp_ajax_submit_post', 'my_submit_post_function' );
 
function my_submit_post_function() {
    check_ajax_referer( 'submit_post', 'submit_post_nonce' );
 
    $post_title = sanitize_text_field( $_POST['post_title'] );
    $post_content = sanitize_text_field( $_POST['post_content'] );
 
    // 确保用户已登录或其他验证逻辑
    if ( is_user_logged_in() || ... ) {
        $new_post = array(
            'post_title' => $post_title,
            'post_content' => $post_content,
            'post_status' => 'publish',
            'post_type' => 'post',
            'post_author' => ... // 用户ID
        );
 
        $post_id = wp_insert_post( $new_post );
 
        if ( !is_wp_error( $post_id ) ) {
            // 成功后的操作,比如返回新帖子的链接
            wp_send_json_success( array( 'link' => get_permalink( $post_id ) ) );
        } else {
            // 失败则返回错误信息
            wp_send_json_error( $post_id->get_error_message() );
        }
    } else {
        // 用户未登录的错误处理
        wp_send_json_error( '需要登录' );
    }
 
    die();
}

确保在你的 WordPress 主题的 functions.php 文件中包含上述 AJAX 处理函数,或者如果你在创建插件,那么应该在插件的 PHP 文件中包含。

这个示例假设用户已经登录,如果需要匿名用户也能提交帖子,你需要修改验证逻辑来适应匿名用户的情况。记得使用 wp_send_json_success 和 wp_send_json_error 来返回

提示:仅供参考

方法二:帮我写代码:允许用户向您的 WordPress 网站提交帖子

// 确保WordPress函数和类的正确加载
require( dirname( __FILE__ ) . '/wp-load.php' );
 
// 检查是否通过表单提交数据
if ( isset( $_POST['submit'] ) ) {
    // 初始化错误消息变量
    $errors = array();
 
    // 验证数据
    if ( empty( $_POST['title'] ) ) {
        $errors[] = '请输入帖子标题。';
    }
    if ( empty( $_POST['content'] ) ) {
        $errors[] = '请输入帖子内容。';
    }
 
    // 如果没有错误,则插入帖子
    if ( empty( $errors ) ) {
        // 配置帖子数据
        $post = array(
            'post_title' => $_POST['title'],
            'post_content' => $_POST['content'],
            'post_status' => 'publish',
            'post_author' => get_current_user_id(),
            'post_type' => 'post'
        );
 
        // 插入帖子
        $post_id = wp_insert_post( $post );
 
        // 插入成功
        if ( !is_wp_error( $post_id ) ) {
            // 可以添加成功后的处理代码,例如页面跳转或显示成功消息
            echo '帖子发布成功!';
        } else {
            // 如果插入失败,显示错误消息
            $errors = $post_id->get_error_messages();
        }
    }
 
    // 如果有错误,显示错误消息
    if ( !empty( $errors ) ) {
        foreach ( $errors as $error ) {
            echo $error . '<br/>';
        }
    }
}
?>
 
<!-- 显示一个表单供用户填写 -->
<form method="post" action="">
    <label for="title">标题:</label>
    <input type="text" name="title" id="title" /><br />
    <label for="content">内容:</label>
    <textarea name="content" id="content" rows="10" cols="50"></textarea><br />
    <input type="submit" name="submit" value="提交" />
</form>

这段代码首先检查是否有通过表单提交的数据,如果有,它会进行数据验证,然后尝试将数据作为新帖子插入WordPress。如果插入成功,它会显示一条成功消息;如果有错误,它会显示相应的错误消息。这个例子简单明了,并且包含了基本的安全性检查和错误处理。

提示:仅供参考

方法三:wordpress允许用户在前端提交帖子页面

在WordPress中,你可以使用内置的函数wp_insert_post来允许用户在前端提交帖子。以下是一个简单的例子,展示了如何创建一个简单的表单,并在提交时创建一个帖子。

首先,你需要创建一个表单来让用户输入帖子的内容:

<form method="post" action="">
    <label for="post_title">标题:</label>
    <input type="text" id="post_title" name="post_title" />
 
    <label for="post_content">内容:</label>
    <textarea id="post_content" name="post_content"></textarea>
 
    <input type="submit" name="submit_post" value="提交帖子" />
</form>

然后,在你的主题的functions.php文件或者任何你选择的插件文件中,你可以添加以下代码来处理表单提交并创建帖子:

if (isset($_POST['submit_post'])) {
    // 验证和清理用户输入
    $post_title = sanitize_text_field($_POST['post_title']);
    $post_content = wp_kses_post($_POST['post_content']);
 
    // 设置帖子参数
    $new_post = array(
        'post_title' => $post_title,
        'post_content' => $post_content,
        'post_status' => 'publish', // 或者 'pending', 'draft', 'future', 'private'
        'post_author' => get_current_user_id(), // 当前登录用户ID
    );
 
    // 创建帖子
    $post_id = wp_insert_post($new_post);
 
    if ($post_id !== 0) {
        // 成功创建帖子后的操作,比如重定向到帖子页面
        wp_redirect(get_permalink($post_id));
        exit;
    } else {
        // 创建帖子失败的操作,比如显示错误信息
        echo '创建帖子失败。';
    }
}

请注意,这个例子没有包括错误处理或者验证用户是否登录,你应该在实际应用中添加这些功能。另外,确保你的表单是通过HTTPS提交的,并考虑使用非cee4的方法来保证内容的安全。

提示:仅供参考

方法四:允许用户向您的 WordPress 网站提交帖子

以下是一个在 WordPress 中允许用户提交帖子的代码示例:

<?php
// 确保 WordPress 函数和类的正确加载
require( dirname( __FILE__ ). '/wp-load.php' );

// 检查是否通过表单提交数据
if ( isset( $_POST['submit'] ) ) {
    // 初始化错误消息变量
    $errors = array();

    // 验证数据
    if ( empty( $_POST['title'] ) ) {
        $errors[] = '请输入帖子标题。';
    }
    if ( empty( $_POST['content'] ) ) {
        $errors[] = '请输入帖子内容。';
    }
    if ( empty( $_POST['author_name'] ) ) {
        $errors[] = '请输入作者名称。';
    }

    // 如果没有错误,则插入帖子
    if ( empty( $errors ) ) {
        // 配置帖子数据
        $post = array(
            'post_title' => $_POST['title'],
            'post_content' => $_POST['content'],
            'post_status' => 'pending', // 设置为待审核状态
            'post_author' => 0,
            'post_type' => 'post'
        );

        // 插入帖子
        $post_id = wp_insert_post( $post );

        // 插入成功
        if (!is_wp_error( $post_id ) ) {
            // 可以添加成功后的处理代码,例如页面跳转或显示成功消息
            echo '帖子提交成功,等待审核。';
        } else {
            // 如果插入失败,显示错误消息
            $errors = $post_id->get_error_messages();
        }
    }

    // 如果有错误,显示错误消息
    if (!empty( $errors ) ) {
        foreach ( $errors as $error ) {
            echo $error. '<br/>';
        }
    }
}
?>

<!-- 显示一个表单供用户填写 -->
<form method="post" action="">
    <label for="title">标题:</label>
    <input type="text" name="title" id="title" /><br />
    <label for="content">内容:</label>
    <textarea name="content" id="content" rows="10" cols="50"></textarea><br />
    <label for="author_name">作者名称:</label>
    <input type="text" name="author_name" id="author_name" /><br />
    <input type="submit" name="submit" value="提交" />
</form>

这段代码在用户提交帖子时要求输入标题、内容和作者名称。提交的帖子将处于待审核状态,管理员可以在后台进行审核后发布。

请注意,这只是一个基本的示例,在实际应用中,你可能需要根据具体需求进行更多的安全处理和功能扩展。

提示:仅供参考