正文 评论

WordPress主题开发中纯代码实现前端投稿功能

我们在WordPress主题过程中,很多时候会需要在前端做一个投稿功能,当然最简单的方法就是用一些投稿插件或前端化插件,但是如果只是需要一个简单的前端投稿,而没有更多功能需求的时候,我们不妨减少插件的使用量,直接用代码来做我们的WordPress主题前端投稿页面。其实很简单,方法如下:

第一步:创建一个“在线投稿”页面模板,这个简单,直接复制page.php文件,然后把复制后的文件改一个名字,比如tougao.php,具体怎么命名看你自己了。然后在你新复制的这个tougao.php文件的第一行插入下面的代码:

<?php/*Template Name: 投稿模板*/?>

当然,您也可以直接不要上面代码中的php标签,直接把上面代码中的/*Template Name:投稿模板*/直接放在您的tougao.php第一行的php标签内。

第二步:把下面的代码放到tougao.php最上面的php标签内

 if( isset($_POST[\'tougao_form\']) && $_POST[\'tougao_form\'] == \'send\'){
    if ( isset($_COOKIE[\"tougao\"]) && ( time() - $_COOKIE[\"tougao\"] ) < 120 ){//这里的120是您限制多长时间内只能投稿一次
        wp_die(\'您投稿也太勤快了吧,先歇会儿!\');
    }
    //表单变量初始化
    $name = isset( $_POST[\'tougao_authorname\'] ) ? $_POST[\'tougao_authorname\'] : \'\';
    $email = isset( $_POST[\'tougao_authoremail\'] ) ? $_POST[\'tougao_authoremail\'] : \'\';
    $blog = isset( $_POST[\'tougao_authorblog\'] ) ? $_POST[\'tougao_authorblog\'] : \'\';
    $title = isset( $_POST[\'tougao_title\'] ) ? $_POST[\'tougao_title\'] : \'\';
    $tags = isset( $_POST[\'tougao_tags\'] ) ? $_POST[\'tougao_tags\'] : \'\';
    $category = isset( $_POST[\'cat\'] ) ? (int)$_POST[\'cat\'] : 0;
    $content = isset( $_POST[\'tougao_content\'] ) ? $_POST[\'tougao_content\'] : \'\';
    //表单项数据验证
    if ( empty($name) || strlen($name) > 20 ){
        wp_die(\'昵称必须填写,且不得超过20个长度\');
    }
    if ( empty($email) || strlen($email) > 60 || !preg_match(\"/^([a-z0-9\\+_\\-]+)(\\.[a-z0-9\\+_\\-]+)*@([a-z0-9\\-]+\\.)+[a-z]{2,6}$/ix\", $email)){
        wp_die(\'邮箱必须填写,且不得超过60个长度,必须符合 Email 格式\');
    }
    if ( empty($title) || strlen($title) > 100 ){
        wp_die(\'文章标题必须填写,且不得超过100个长度\');
    }
    if ( empty($content) || strlen($content) < 100){
        wp_die(\'内容必须填写,且不得少于100个长度\');
    }
    $tougao = array(
        \'post_title\' => $title,                //标题
        \'post_content\' => $content,            //内容
        \'post_status\' => \'pending\',            //待审
        \'tags_input\' => $tags,                //标签
        \'post_category\' => array($category)    //分类
    );
    //将文章插入数据库
    $status = wp_insert_post( $tougao );
    if ($status != 0){
    /*
        //将自定义域写入最新待审文章
        global $wpdb;
        $myposts = $wpdb->get_results(\"
            SELECT ID
            FROM $wpdb->posts
            WHERE post_status = \'pending\'
            AND post_type = \'post\'
            ORDER BY post_date DESC
        \");
        add_post_meta($myposts[0]->ID, \'cbs_postauthor\', $name);    //插入投稿人昵称的自定义域
        if ( !empty($blog)) add_post_meta($myposts[0]->ID, \'cbs_posturl\', $blog);    //插入投稿人网址的自定义域
    */
        setcookie(\"tougao\", time(), time()+180);
        wp_die(\'投稿成功!\',\'投稿成功!\');
    } else {
        wp_die(\'投稿失败!\',\'投稿失败!\');
    }

第三部:创建投稿表单,将下面的代码放到tougao.php中<?php the_content();?>下面:

<form id=\"tougaoform\" method=\"post\" action=\"<?php echo $_SERVER[\"REQUEST_URI\"]; ?>\">
        <p><input id=\"author\" type=\"text\" size=\"40\" value=\"\" name=\"tougao_authorname\" /><label>昵称(*必填)</label></p>
        <p><input id=\"email\" type=\"text\" size=\"40\" value=\"\" name=\"tougao_authoremail\" /><label>邮箱(*必填)</label></p>
        <p><input id=\"url\" type=\"text\" size=\"40\" value=\"\" name=\"tougao_authorblog\" /><label>您的博客/文章来源</label></p>
        <p><input id=\"tougao_title\" type=\"text\" size=\"40\" value=\"\" name=\"tougao_title\" /><label>文章标题(*必填)</label></p>
        <p><input id=\"tags\" type=\"text\" size=\"40\" value=\"\" name=\"tougao_tags\" /><label>文章标签(多个标签请用英文逗号 , 分开)</label></p>
        <p><?php wp_dropdown_categories(\'show_option_none=请选择文章分类&show_count=1&hierarchical=1&hide_empty=0\'); ?><label>文章分类(*必填)</label></p>
        <textarea rows=\"15\" cols=\"55\" id=\"tougao\" name=\"tougao_content\"></textarea>
        <p>
        <input type=\"hidden\" value=\"send\" name=\"tougao_form\" />
        <input id=\"submit\" type=\"submit\" value=\"提交\" />
        <input id=\"reset\" type=\"reset\" value=\"重填\" />
        </p>
</form>

到这一步一个简单的WordPress主题前端投稿功能就实现了,您可以根据您的需要对投稿表单的样式,以及投稿字段或内容进行调整。

如果您对以上文字性的说明还不明白,您也可以查看我们制作的视频教程,点击查看视频教程

回复

暂无评论