WordPress 非插件实现前台投稿功能

王朝学院·作者佚名  2016-08-22
窄屏简体版  字體: 小  |  中  |  大  |  超大  

很多网站都想开放读者的投稿功能,接受读者的投稿,不仅可以丰富博客的内容,还可以增加与读者之间的沟通,可以说是一举多得的事情,何乐不为呢?WordPRess本身并不提供投稿功能,但是WordPress拥有强大的扩展能力,我们可以自己来添加这个功能。

实 现用户投稿,有两种方法,一种是开放后台的注册功能,普通用户注册进去默认设置为投稿者,登陆进去即可添加文章(默认为草稿);另一种方法是在前台提供投 稿表单,用户填写相应的表格即可。前一种方法实现起来比较简单,基本不需要博主配置太多东西,只是有些博主可能会觉得别扭,不愿让他人看到自己的博客后 台;而后一种方法对投稿者来说方便了很多,博主也不用担心自己博客的后台隐私,只是该方法实现起来比较麻烦,需要配置的东西很多。本文也只将介绍后一种方 法,希望对你有所帮助,当然也只是复制粘贴代码就可以了。

一、添加投稿表单1、首先在当前主题的目录下新建一个php文件,命名为tougao-page.php,然后将page.php中的所有代码复制到tougao-page.php中;

2、删除tougao-page.php开头的所有注释,即 /* 与 */ ,以及它们之间的所有内容;

3、将 <?php the_content(); ?> 改成以下代码:

<?phpthe_content();?><!--关于表单样式,请自行调整--><form method="post"action="<?php echo $_SERVER["REQUEST_URI"]; ?>"><div style="text-align: left; padding-top: 10px;"><labelfor="tougao_authorname">昵称:*</label><input type="text"size="40"value=""id="tougao_authorname"name="tougao_authorname"/></div><div style="text-align: left; padding-top: 10px;"><labelfor="tougao_authoremail">E-Mail:*</label><input type="text"size="40"value=""id="tougao_authoremail"name="tougao_authoremail"/></div><div style="text-align: left; padding-top: 10px;"><labelfor="tougao_authorblog">您的博客:</label><input type="text"size="40"value=""id="tougao_authorblog"name="tougao_authorblog"/></div><div style="text-align: left; padding-top: 10px;"><labelfor="tougao_title">文章标题:*</label><input type="text"size="40"value=""id="tougao_title"name="tougao_title"/></div><div style="text-align: left; padding-top: 10px;"><labelfor="tougaocategorg">分类:*</label><?phpwp_dropdown_categories('id=tougaocategorg&show_count=1&hierarchical=1');?></div><div style="text-align: left; padding-top: 10px;"><labelfor="tougao_content">文章内容:*</label><textarea rows="15"cols="55"id="tougao_content"name="tougao_content"></textarea></div><

br clear="all"><div style="text-align: center; padding-top: 10px;"><input type="hidden"value="send"name="tougao_form"/><input type="submit"value="提交"/><input type="reset"value="重填"/></div></form>

二、添加表单处理代码在tougao-page.php开头处中,将第一个 <?php 改成:

<?php/*** Template Name: tougao* 作者:露兜* 博客:http://www.ludou.org/** 更新记录* 2010年09月09日 :* 首个版本发布** 2011年03月17日 :* 修正时间戳函数,使用wp函数current_time('timestamp')替代time()** 2011年04月12日 :* 修改了wp_die函数调用,使用合适的页面title*/if(isset($_POST['tougao_form'])&&$_POST['tougao_form']=='send'){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秒。// 可自行修改时间间隔,修改下面代码中的120即可// 相比Cookie来验证两次投稿的时间差,读数据库的方式更加安全if(current_time('timestamp')-strtotime($last_post)<120){wp_die('您投稿也太勤快了吧,先歇会儿!');}// 表单变量初始化$name=isset($_POST['tougao_authorname'])?trim(htmlspecialchars($_POST['tougao_authorname'],ENT_QUOTES)):'';$email=isset($_POST['tougao_authoremail'])?trim(htmlspecialchars($_POST['tougao_authoremail'],ENT_QUOTES)):'';$blog=isset($_POST['tougao_authorblog'])?trim(htmlspecialchars($_POST['tougao_authorblog'],ENT_QUOTES)):'';$title=isset($_POST['tougao_title'])?trim(htmlspecialchars($_POST['tougao_title'],ENT_QUOTES)):'';$category=isset($_POST['cat'])?(int)$_POST['cat']:0;$content=isset($_POST['tougao_content'])?trim(htmlspecialchars($_POST['tougao_content'],ENT_QUOTES)):'';// 表单项数据验证if(empty($name)||mb_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('Email必须填写,且长度不得超过60字,必须符合Email格式');}if(empty($title)||mb_strlen($title)>100){wp_die('标题必须填写,且长度不得超过100字');}if(empty($content)||mb_strlen($content)>3000||mb_strlen($content)<100){wp_die('内容必须填写,且长度不得超过3000字,不得少于100字');}$post_content='昵称: '.$name.'<br />Email: '.$email.'<br />blog: '.$blog.'<br />内容:<br />'.$content;$tougao=array('post_title'=>$title,'post_content'=>$post_content,'post_category'=>array($category));// 将文章插入数据库$status=wp_insert_post($tougao);if($status!=0){// 投稿成功给博主发送邮件// somebody#example.com替换博主邮箱// My subject替换为邮件标题,content替换为邮件内容wp_mail("somebody#example.com","My subject","content");wp_die('投稿成功!感谢投稿!','投稿成功');}else{wp_die('投稿失败!');}}

最后以UTF-8编码保存tougao-page.php,否则中文可能会乱码。

代码补充说明,如果你想让投稿的文章立即发布,而不需要审核再编辑,那么请将以上代码58行改成:

'post_content'=>$post_content,'post_status'=>'publish',

最后进入WordPress管理后台 – 页面 – 创建页面,标题为投稿(可以自己起名),内容填上投稿说明等,右侧可以选择模板,选择 tougao 即可。

好了,基本的投稿功能已经添加完毕,至于表单样式不好看,表单缺少你想要的项目等问题,你就自己添加CSS、表单项吧。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航