wordpress如何添加匿名投稿功能

  • A+
所属分类:wordpress

因为常常浏览、学习别人的博客,我发觉一个不争的事实就是:相当一部份做得比较成功的博客都接受读者投稿(当然,可能有的是邀请写手,那也算是一种聪明的做法!),这种情况实际上是协作中的一种,反映出:一个人的力量是有限的,大家一齐努力才能取得更快、更大的进步。特别是对于使用 WordPress 搭建新闻或信息类网站的站长来说,接受投稿是个必不可少的功能。

让读者给你的博客投稿,一来既能加快博客更新的频率,丰富博客内容;二来也可以促进你(作为博主)与读者之间的交流或互动(反过来你也可以给其他友情博客投稿),真正是一举多得的事情!要怎样才能让别人给你的博客投稿呢?

WordPress 是个博客系统,本身没有类似于 CMS 系统的投稿功能,怎么办呢?下面例举三种方法,分为使用插件和不用插件,让你也可以在 WordPress 博客上实现让读者给你投稿功能。

一、开放博客注册功能

WordPress 本身接受读者注册成为用户,用户角色又分为多种,其中一种就是“投稿者”,也就是具有为你的博客撰写文章的用户。操作步骤相信大家都懂的:

1、登录博客后台管理面板【常规】选项页面:

wordpress如何添加匿名投稿功能

二、允许读者在你的博客上注册成为用户,在【成员资格】一栏中勾选“任何人都可以注册”前面的复选框,然后在【新用户默认角色】一栏后面的下拉列表上点选“投稿者”,最后保存更改。

这样设置之后,读者注册成为你博客的用户即具有了撰写文章的权限。

二、使用相关的 WordPress 投稿插件

1.submit posts

Submit Posts 这款插件采用了AJAX 技术,代码结构相当简单,没有附加其他任何功能,支持游客投稿,不依赖任何的框架,也无需任何设置。

wordpress如何添加匿名投稿功能

插件特点:

  • 稿件投送后处于审核状态
  • 如果投稿成功,自动给投稿者发送邮件通知

插件的安装使用也很简单,下载压缩包后,解压上传并激活,然到后台创建一个投稿的页面,在需要插入投稿表单的地方插入下面这条简码即可:

?
1
[submit_posts]

当然,你也可以这条简码插入到日志中去。

WordPress投稿插件下载:submit posts

这款插件在知更鸟博客上有较详细的介绍,大家也可以拜访,他那里同样提供插件的下载链接。

2.User Submitted Posts

插件介绍:

插件名:User Submitted Posts

插件特色:

游客提交的信息可包括标题,标签,分类,作者,网址,内容及图像(多张);

支持在模板中使用模板标签或者该插件的简码来显示提交表单;

支持图片上传,可设置图片的数量、大小以及指定图片的最小和最大尺寸,此外还支持批量上传;

支持一键过滤用户提交的搞件;

支持定制提交表单的名称、IP、网站以上传图片的路径;

插件安装:

下载安装插件后,在已安装插件列表中启用该投稿插件;

在后台设置选项卡下的User Submitted Posts选项进入插件的设置界面对插件进行设置;

通过在日志或者主题页面中使用模板标签、php代码引用来显示稿件提交表单

要在日志中显示稿件提交表单,插入简码:

1
[user-submitted-posts]

要在主题文件中显示稿件提交表单的方法:

1
<?php public_submission_form(true); ?>

User Submitted Posts 插件提供了一些模板标记以增强该插件的灵活性

显示提交稿件中的图片附件,使用如下方式:

1
<?php post_attachments(); ?>

该函数可打印出指定的稿件的图片的详细信息,参数说明如下:

1
<?php post_attachments($size, $beforeUrl, $afterUrl, $numberImages, $postI); ?>

$size   设置默认大小,可选参数为 thumbnail, medium, large or full  默认值为 full

$beforeUrl  设置image标签前的文本或者html标记,默认值为” <img src=”

$afterUrl   设置image标签后的文本或者html标记,默认值为” />

$numberImages 设置每篇稿件的图片显示数量,默认值为 false(Belary注: 即全部显示

$postId    设置可选的稿件的ID, 默认为使用全局的日志

三、非插件实现 WordPress 博客投稿功能

非插件这种需要折腾的东东,对 WordPress 来说,说好也不好,好的地方就是通常只需使用简单的代码即可实现想要的功能,占用系统资源少;不好的地方是兼容性方面可能不如使用插件那么强,因为插件一般会定期更新,代码却不会,因此会过时,修改时比较麻烦。当然,对于代码高手来说,这并不成问题。

因为本人对代码类不是十分熟悉,这里介绍的非插件实现 WordPress 投稿功能,还是引用露兜博客的做法。我在最新版的 Twenty Ten 主题上做了个测试,将其中的页面文件 page.php 复制一份出来修改为 contribute.php ,然后将<div id=”content” role=”main”>与</div><!– #content –>之间的代码换成露兜所介绍的代码,见下面:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php  
  /**  
   * Template Name: Contribute 
   */         
  get_header(); ?>  
  <div id="container"> 
              <div id="content"role="main">
<?php  
  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('投稿失败!');  
  }  
  }  
?> 
 <h3>欢迎投稿</h3> 
  <form method="post"action="<?php echo $_SERVER["REQUEST_URI"]; ?>">  
  <div style="text-align: left; padding-top: 10px;">  
  <labelfor="tougao_authorname">昵称(必填):</label><br/>  
  <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> <br/>  
  <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> <br/>  
  <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> <br/>  
  <input type="text"size="40"value=""id="tougao_title"name="tougao_title"/> 
  </div>  
  <div style="text-align: left; padding-top: 10px;">  
  <labelfor="tougaocategorg">分类(必填):</label> <br/>  
  <?php wp_dropdown_categories('id=tougaocategorg&show_count=1&hierarchical=1'); ?>  
  </div>  
  <div style="text-align: left; padding-top: 10px;">  
  <label style="vertical-align:top"for="tougao_content">文章内容(必填):</label> <br/>  
  <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> 
 </div><!-- #content --> 
          </div><!-- #container -->  
 <?php get_sidebar(); ?> 
 <?php get_footer(); ?>

以 UTF-8 编码保存更改,再将这个文件上传到服务器上当前主题目录下,然后到 WordPress 后台创建一个新的页面,页面模板就选择上面的这个contribute.php。下图是我在 Twenty Ten 1.4 版本上测试的结效果截图:

wordpress如何添加匿名投稿功能

我觉得这个表单相当不错,虽然简单,但是已经很好用了。稿件投递以后会在 WordPress 后台以草稿的形式暂时保存起来,直到管理员审核并批准才正式发表。

weinxin
我的微信
这是我的微信扫一扫

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: