我们接着来对WordPress主题的用户中心的author_write.php写博客文章页面进行完善。上一章中我们只是给它添加了前台静态代码,实现前台的展示效果。本章,我们将对author_write.php页面表单提交的数据进行处理,进而写入到wordpress数据库中。
第一步:判断页面是否提交了表单:
在这个页面的表单中我们添加了一个隐藏的表单元素tougao_form,我们只需判断这个表单元素在提交的数据中是否存在,如果存在,就表示正在提交表单数据,如下:
//发表文章
if( isset($_POST['tougao_form']) && $_POST['tougao_form'] == 'send'){//在这里对表单提交的数据进行处理,下面的Php代码都写在这里
}
第二步:限制频繁发表文章
为了防止机器人乱发表文章,这里设置一个瓶颈,限制同一用户发表2篇文章之间的间隔是120秒。
global $wpdb;
$last_post = $wpdb->get_var("SELECT post_date FROM $wpdb->posts WHERE post_type = 'post' ORDER BY post_date DESC LIMIT 1");// 博客当前最新文章发布时间与要投稿的文章至少间隔120秒。
');
if ( current_time('timestamp') - strtotime($last_post) < 120 ){
echo ('
return;
}
第三步:获取表单数据。
这里获取表单提交上的数据,这些数据将会被写入到wordpress数据库中。代码如下:
// 表单变量初始化
$title = isset( $_POST['tougao_title'] ) ? trim(htmlspecialchars($_POST['tougao_title'], ENT_QUOTES)) : ''; //文章标题
$category = isset( $_POST['cat'] ) ? (int)$_POST['cat'] : 0; //文件分类
$content = isset( $_POST['myeditor'] ) ? $_POST['myeditor'] : ''; //文章内容
$user_id = isset( $_POST['user_id'] ) ? (int)$_POST['user_id'] : 0;//发表文章的用户ID$post_tags = isset( $_POST['post_tags'] ) ? trim(htmlspecialchars($_POST['post_tags'], ENT_QUOTES)) : ''; //文章的tags标签
第四步:对数据进行必要的判断:
判断的目的,为了防止以下情况:空标题、标题在数据库是否已经存在、没有选择分类、文章内容过短或过长。代码如下:
// 标题是否为空
');
if ( empty($title) || mb_strlen($title) > 100 ){
echo ('
return;
}//判断标题是否存在
');
$rel = $wpdb->get_row('select * from wp_posts where post_title="'.$title.'"');
if($rel){
echo ('
return;
}//分类有没有选择
');
if($category<=0){ //选择分类
echo ('
return;
}
//文章内容长度判断
if ( empty($content) || mb_strlen($content) > 10000 || mb_strlen($content) < 100){
echo ('');
return;
}
第五步:将表单数据写入到数据库。
经过以上几步的过滤,我们可以把表单数据写入到wordpress的数据库中了。代码如下:
$tougao = array( 'post_status' => 'publish', //publish表示正式发表。 'post_title' => $title, 'post_content' => $content, 'post_category' => array($category) ); // 将文章插入数据库 $status = wp_insert_post( $tougao ); //返回文章ID
第六步:添加文章的tag标签。
因为wordpress的文章与文章标签在数据库中不是在同一张数据表中的,所以,wp_insert_post()函数在插入数据时,并没有把tags标签写入到数据库中,所以,我们要在此对tag进行插入操作,如下:
if ($status != 0){ //如果wp_insert_post()插入成功
wp_set_post_tags( $status, explode(",",$post_tags) );//插入tags标签
wp_die('文章发表成功!','文章发表成功!');
}else{
wp_die('文章发表失败!','文章发表失败!');
}
一般情况下,到这里,我们就可以结束了。但是,我们这里是在制作WordPress主题的用户中心,不仅是为了发表文章,我们还要在发表文章时实现积分的累加。这个在下一章中,我们再接着往下讲。嗯,本章就介绍到这里。谢谢大家参阅哦。