WordPress无插件实现游客投稿功能

作者笔名:郑力
作者邮箱:admin@zlphp.com
作者主页:http://www.zlphp.com
文章内容:
1、复制主题文件page.php重命名为contribute.php。
2、在

  1. <?php get_header(); ?>  

前面添加如下代码:

  1. <?php    
  2. /*  
  3. Template Name:游客投稿  
  4. */    
  5. if(isset($_POST[‘contributeform’])&&$_POST[‘contributeform’]==’send’){    
  6.     global $wpdb;    
  7.     $last_post=$wpdb->get_var(“SELECT post_date FROM $wpdb->posts WHERE post_type = ‘post’ ORDER BY post_date DESC LIMIT 1”);    
  8.     if(current_time(‘timestamp’)-strtotime($last_post)<60){wp_die(‘投稿间隔应至少为1分钟!’);}    
  9.     $name=isset($_POST[‘authorname’])?trim(htmlspecialchars($_POST[‘authorname’],ENT_QUOTES)):;    
  10.     $email=isset($_POST[‘authoremail’])?trim(htmlspecialchars($_POST[‘authoremail’],ENT_QUOTES)):;    
  11.     $url=isset($_POST[‘authorurl’])?trim(htmlspecialchars($_POST[‘authorurl’],ENT_QUOTES)):;    
  12.     $title=isset($_POST[‘articletitle’])? trim(htmlspecialchars($_POST[‘articletitle’],ENT_QUOTES)):;    
  13.     $category=isset($_POST[‘cat’])?(int)$_POST[‘cat’]:0;    
  14.     $content=isset($_POST[‘articlecontent’])?trim(htmlspecialchars($_POST[‘articlecontent’],ENT_QUOTES)):;    
  15.     if(emptyempty($name)||mb_strlen($name)>30){wp_die(‘作者笔名必须填写,且长度不能超过30个字符!’);}    
  16.     if(emptyempty($email)||strlen($email)>60||!preg_match(“/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix”,$email)){wp_die(‘作者邮箱必须填写,且长度不能超过60个字符,并符合邮箱格式!’);}    
  17.     if(emptyempty($title)||mb_strlen($title)>120){wp_die(‘文章标题必须填写,且长度不能超过120个字符!’);}    
  18.     if(emptyempty($content)||mb_strlen($content)>20000||mb_strlen($content)<100){wp_die(‘文章内容必须填写,且长度不能超过20000个字符,不能少于100个字符!’);}    
  19.     $post_content=’作者笔名:’.$name.'<br />作者邮箱:’.$email.'<br />作者主页:’.$url.'<br />文章内容:<br />’.$content;    
  20.     $contribute=array(‘post_title’=>$title,’post_content’=>$post_content,’post_category’=>array($category));    
  21.     $status=wp_insert_post($contribute);    
  22.     if($status!=0){    
  23.       wp_mail(.get_option(‘blog_mail_username’).,.get_option(‘blogname’).’游客投稿’,’您的’.get_option(‘blogname’).’有游客投稿!’);    
  24.       wp_die(‘投稿成功,您的文章将在审核通过后发布!’,’投稿成功’);}    
  25.     else{wp_die(‘投稿失败’);}}    
  26. ?>    

3、在

  1. <?php the_content(); ?>  

后面添加以下代码:

  1. <form method=“post” action=“<?php echo $_SERVER[“REQUEST_URI“]; ?>”>    
  2. <div class=“contributebox”>    
  3.   <div class=“inputclass”><input type=“text” name=“authorname” id=“authorname” value=“” /><label for=“authorname”>作者笔名(必填)</label></div>    
  4.   <div class=“inputclass”><input type=“text” name=“authoremail” id=“authoremail” value=“” /><label for=“authoremail”>作者邮箱(必填)</label></div>    
  5.   <div class=“inputclass”><input type=“text” name=“authorurl” id=“authorurl” value=“” /><label for=“authorurl”>作者主页</label></div>    
  6.   <div class=“inputclass”><input type=“text” name=“articletitle” id=“articletitle” value=“” /><label for=“articletitle”>文章标题(必填)</label></div>    
  7.   <div class=“inputclass”><?php wp_dropdown_categories(‘show_count=1&hierarchical=1‘); ?><label for=“cat”>文章分类(必选)</label></div>    
  8.   <textarea name=“articlecontent” id=“articlecontent” onblur=“if(this.innerHTML==”){this.innerHTML=’文章内容…’;this.style.color=”}” onFocus=“if(this.innerHTML==’文章内容…’){this.innerHTML=”;this.style.color=”}”>文章内容…</textarea>    
  9.   <input type=“hidden” value=“send” name=“contributeform” />    
  10.   <input type=“submit” class=“contributesubmit” id=“contributesubmit” value=“确认投稿” />    
  11. </div>    
  12. </form>    

4、新建页面,页面模板选择“游客投稿”。

京东云空间WordPress程序使用wp2pcs插件

jcloudlogo.png
这里怎么申请京东云空间,面包站长就不说了,网上这类的教程很多,一搜就有,看上这空间的人不少,主要是免费空间的缘故,所以这里面包站长要说一说。
这里着重的说一下在安装的过程里面要注意的几点:
1.空间要给予文件可写和给予伪静态(这点面包站长是极力推荐的),要不会有可能失败。
在京东云空间里面部署的时候,自己本地压缩包里面,根目录要放进.htacces文件,在上传的时候一并上传部署,要不开启伪静态会很麻烦,这个要注意!

2.要开启外链。
经过很多空间的测试,和站长在使用京东云空间过程中,面包站长还是觉得外链模式比较稳定快速,发现直链打开速度比外链要差。外链缺点是SEO不理想。

京东云空间部署WP2PCS插件演示:http://chnhmn.jd-app.com/

WP2PCS插件官方下载:http://wordpress.org/plugins/wp2pcs/

取消wordpress主题对google maps api的调用

最近那GOOGLE的很多调用出现问题,为啥?你懂的!
所以最近客户告诉我他们网站打开奇慢无比,要求我帮助解决一下。

我进到网站以后,查看了源代码,看出了是由于GOOGLE字库的问题,进FTP,下载了wp-includes/script-loader.php文件,把里面和googleapis.com有关的,一起给替换为了useso.com,完了上传以后,问题出来了,感觉速度还是没有什么提高啊,再看源代码,发现还有一个家伙很顽固啊,它叫http://maps.google.com/maps/api/,一直在查找,看来主要是它的问题了,找主题,我用的软件是:sublime ,我用的中文破解版,下载地址:http://pan.baidu.com/s/1jGfypWM
下载安装该软件之后打开,选择 “查找”——>“在文件中查找…”(倒数第二项)。查找内容我填写的是:”maps”.位置就是刚才下载在桌面的主题文件夹。然后点击“查找”。
20140706133717.jpg
很容易该文件该链接就出来了。其实网站中也没有使用到谷歌地图,所以我就直接把它给喀嚓了。
恩,这下感觉速度上来了。

wordpress固定链接出现404怎么办

在使用WordPress程序, 如果设置了wordpress固定链接, 那么, 在网站的链接URL中, 就会出现index.php问题, 如果不添加index.php,就会出现404错误,

下面是本人解决wordpress固定链接出现404错误的解决办法。

wordpress固定链接设置出现404错误的具体操作步骤如下:

1, 新建一个记事本文件, 写入以下代码, 并保存, 连同.txt格式重新命名为404.php;


2, 在主机服务器的主机管理控制面板中, 设置404自定义错误指向404.php;本人使用的是虚拟主机,操作步骤如图。
404-error.jpg
3, 完成以上步骤后,在WordPress的后台 – 设置(Options) – 固定链接(Permalinks)中重新设置你希望使用的永久链接形式就可以了.

/%year%/%monthnum%/%post_id%/
/%year%/%monthnum%/%postname%/

通过以上三步简单的设置, 你的Windows主机就可以和Linux主机一样, 设置固定链接时就不会再出现index.php了,解决wordpress固定链接出现404。
原文出处:http://www.27ying.com/seo_xuexi/33.html

wordpress中自动同步数据库

前些天我的博客“井底之蛙”所在的服务器召攻击了,丢失了一部分数据,这就怪自己没坚持放在SAE上,如果放在SAE就不会有这样的情况发生拉。于是坚定了自己做备份数据的念头,
虽然网上有很多能自动备份数据,如自动发送数据库的sql到邮箱,备份到空间等等各种插件,但是也不知道咋滴,一直没用成功过,于是决定自己写一个,一直都认为代码的乐趣,在于解决自己的需要。wordpress可玩性也在于此。废话不说,说下我的想法:
博客最重要的内容,当然是发表的文章,于是决定从发布文章开始入手,可以在每次发布新文章的时候,备份一下这条数据,初步有两个简单的方法:
1、把数据库导出,然后发送到邮箱以文件的形式保存。
2、把这条数据远程备份到另外一个数据库。
相对来说,远程备份到另一个数据库比较简单,因为方法1先要导出,再要发送,涉及到空间、mail。作为一只非职业码畜,只能选择较为简单的方法。
于是我用了之前创建的两个sae应用做实验,暂时把原本的数据库称为A,备份的数据库称为B吧。要把A的数据备份到B,这里就会涉及到一个传送数据的问题,我们都知道常用的传送数据就是用表单,get、post方式,我们不可能在A中写一个表单,然后action写B的地址。这里有一种方法,那就是Curl(没见过的同学自己百度哈),在A应用中触发发表新文章这个动作时,用curl 把数据post到B的数据库,这样就达到我们的目的了。

我的基本思路就是这样,下面就是敲代码了。在wordpress中,我们要用插件的形式去完成这项工作,而wp中新建插件也很简单直接在wp-content/plugins/目录下创建你要的插件文件夹,然后到文件夹里面创建php文件就好了。比如我在A应用中这样子:
020840hhp474cycqhhdqnd.jpg

下一步就是往里面敲代码了。
PHP代码

  1. /* 
  2. *@backage backupdb 
  3. * @version 1.6 
  4. */  
  5. /* 
  6. Plugin Name: backupdb//这里是插件名称 
  7. Plugin URI: http://aoxiang.me//这里是插件链接的地址,这里链接的是我的博客,井底之蛙 
  8. Description: when you publish a new post, this plugin will backed up data to anthor database that you set ;//这里是你插件的简介 
  9. Author: Luffy//author 
  10. Version: 1.0//版本 
  11. Author URI: http://aoxiang.me 
  12. */  
  13. /* 
  14. Plugin Name、Plugin URI、Description、Author、Version等等这几项建议大家都写上,不写有时候wp会不识别插件 
  15. */  
  16. //函数中传入的是发表的新文章,写入A数据库以后,生成的post_id  
  17. function backupdb($post_id)  
  18. {  
  19.     //下面我们通过这个postid,取得A数据库中的这条数据  
  20.   $post_data = get_post($post_id);  
  21.       
  22.     //由于wp中取得的数据是对象(-_-###PHP居然是个有对象的语言,为毛我等码畜无对象!!!)的形式,我习惯了用数组的形式去处理数据,所以这里我把它全部改成了数组。  
  23.   $data[‘id’] = $post_data->ID;  
  24.   $data[‘post_author’] = $post_data->post_author;  
  25.   $data[‘post_date’] = $post_data->post_date;  
  26.   $data[‘post_date_gmt’] = $post_data->post_date_gmt;  
  27.   $data[‘post_content’] = $post_data->post_content;  
  28.   $data[‘post_title’] = $post_data->post_title;  
  29.   $data[‘post_excerpt’] = $post_data->post_excerpt;  
  30.   $data[‘post_status’] = $post_data->post_status;  
  31.   $data[‘comment_status’] = $post_data->comment_status;  
  32.   $data[‘ping_status’] = $post_data->ping_status;  
  33.   $data[‘post_password’] = $post_data->post_password;  
  34.   $data[‘post_name’] = $post_data->post_name;  
  35.   $data[‘to_ping’] = $post_data->to_ping;  
  36.   $data[‘pinged’] = $post_data->pinged;  
  37.   $data[‘post_modified’] = $post_data->post_modified;  
  38.   $data[‘post_modified_gmt’] = $post_data->post_modified_gmt;  
  39.   $data[‘post_content_filtered’] = $post_data->post_content_filtered;  
  40.   $data[‘post_parent’] = $post_data->post_parent;  
  41.   $data[‘guid’] = $post_data->guid;  
  42.   $data[‘post_type’] = $post_data->post_type;  
  43.   $data[‘menu_order’] = $post_data->menu_order;  
  44.   $data[‘post_mime_type’] = $post_data->post_mime_type;  
  45.   $data[‘comment_count’] = $post_data->comment_count;  
  46.   $data[‘ancestors’] = $post_data->ancestors;  
  47.   $data[‘filter’] = $post_data->filter;  
  48.       
  49.       
  50.     //下面的URL就是我们要备份的数据库B的地址了。这里要注意index.php?有个参数backupdb,这是我设置的一个简单的密钥,用来匹配A、B两个应用。后面详解  
  51.   $url = “http://1.jdzw.sinaapp.com/index.php?backupdb=1”;  
  52.       
  53.       
  54.   $ch = curl_init(); //初始化curl  
  55.   curl_setopt($ch, CURLOPT_POST, 1);//告诉curl要使用post传值  
  56.   curl_setopt($ch, CURLOPT_URL, $url);//告诉curl对应的url地址是$URL  
  57.   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);//告诉curl要传过去的数据是$data  
  58.   curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //告诉curl只要传值过去就行了,不用把结果显示出来。    
  59.   curl_exec($ch);//execute  
  60. }  
  61. //add_action是wp的一个亮点,这里简单解释里面两个参数一个是触发时间,一个是执行函数,那么这个函数就易懂了,当发布新文章的时候,执行backupdb这个函数,  
  62. add_action( ‘publish_post’, ‘backupdb’ );  

发送数据搞定了,那就要搞定接收数据了,下面是我B应用中的代码,直接在wordpress/index.php最后加上这一段就好了
PHP代码

  1. //直接在index.php里面加上下面这一段就好了  
  2. if(isset($_GET[‘backupdb’]))  
  3. {  
  4.   $data = $_POST;  
  5.   $sql = “INSERT INTO wp_posts(id,post_author,post_date,post_date_gmt,post_content,post_title,post_excerpt,post_status,comment_status,ping_status,post_password,post_name,to_ping,pinged,post_modified,post_modified_gmt,post_content_filtered,post_parent,guid,post_type,menu_order,post_mime_type,comment_count) VALUES(“.$data[‘id’].“,”.$data[‘post_author’].“,'”.$data[‘post_date’].“‘,'”.$data[‘post_date_gmt’].“‘,'”.$data[‘post_content’].“‘,'”.$data[‘post_title’].“‘,'”.$data[‘post_excerpt’].“‘,'”.$data[‘post_status’].“‘,'”.$data[‘comment_status’].“‘,'”.$data[‘ping_status’].“‘,'”.$data[‘post_password’].“‘,'”.$data[‘post_name’].“‘,'”.$data[‘to_ping’].“‘,'”.$data[‘pinged’].“‘,'”.$data[‘post_modified’].“‘,'”.$data[‘ost_modified_gmt’].“‘,'”.$data[‘post_content_filtered’].“‘,'”.$data[‘post_patent’].“‘,'”.$data[‘guid’].“‘,'”.$data[‘post_type’].“‘,'”.$data[‘menu_order’].“‘,'”.$data[‘post_mime_type’].“‘,'”.$data[‘comment_count’].“‘)”;  
  6.   $wpdb->query($sql);  
  7.     
  8. }  

上面的代码大家应该显而易懂,我稍稍说一下那个密钥和add_action

1、密钥是用来匹配A和B这个应用的,如果没有这个密钥,那当任何人访问B应用的index.php的时候,都会执行后面的插入数据库的这段代码,当然,别人访问的是,是没有post的这个数据库,肯定会出错。
这个密钥是很简单的一种方法,但是不建议大家在index.php里面加入,因为index.php访问次数肯定多,每一次访问都会加上一个判断,这是影响性能的,我们可以新建一个php文件,去专门用来做备份。
密钥的方法不仅限于GET的方法,我们也可以在POST中再加入一个参数用来判断,再牛叉一点,用RC4加解密,再牛叉一点。。。。自己想吧,本码畜智商只到这里,一直都认为,代码的乐趣在于解决自己的需要,也在于自己摸索一些没玩过的东西。

2、add_action是wp中一个非常有意思的地方,它常用在我们写插件的时候,前面说了,第一个参数是触发事件,第二个参数是执行函数,想一下如果我们写的是add_action(“edit_post”,”backupdb”)、add_action(“delete_post”,”backupdb”)会发生什么呢?

在A应用后台中选择启用backupdb这个插件,
024500n0qnspr6rnfapzh6.jpg

然后在A应用中,发布新的文章,就会触发add_action(“publish_post”,”backupdb”),然后backupdb这个函数就会取得最后一条post数据,再将这条数据发送到B应用中,B应用匹配密钥是不是backupdb,如果密钥验证成功,就将$_POST中的数据,插入到B中的数据库。over
下面看我的:
005zRuCggw1eg2tq6e2y6j30sk0ea0z3.jpg

完成!
代码这个东西大同小异,在这里我是用SAE中的应用作为我的备份服务器,因为之前有把域名指向sae,但后来因为域名没有备案,sae只提供海外服务器,家里网络的原因,有时候打开sae有点慢,所以就没指向sae了,现在能够同步重要数据,随时将域名指向sae,就能继续使用了,再也不怕找到攻击拉。哈哈。

瀑布流平衡日志wordpress模板

这款主题是一款非常简洁、有趣易于维护的wordpress博客主题(模板),他的首页有一个列表模式,但是显示的方式却是可以滚动查看跟多的文章。是一个非常有意思的想法。这也是之前看到一个网站,去模仿他的这个方式。
日志适合于插入视频分享,一旦插入视频列表中的显示将有一些小变化,能一下分清是普通日志还是带视频的。他们都是显示在一个列表中,更有趣的是在首页所有列表中模块的元素中点击缩略图他会自动以弹出式显示视频或者图片,可以直接在首页播放的,用户可以在浏览你的首页时,不需要进入内页就能使用这些功能读取信息,是不是很棒的设定呢。整个主题的设计风格就如一个大型焦点图样滚动,非常简洁的设计,简易的界面也是让人看起来非常的舒服,在使用这款主题的时候,尽量挑选漂亮的图片作为封面吧,效果会非常棒的!
moban09ys.jpeg
主题特色功能
特色小工具,我们的主题自带有非常棒的小工具,并且可以在两个位置设置不同的小工具,一个在首页上,一个在页面、内页、列表页上,让网站的显示更加多彩。
本主题还做了链接和标签两个不同的页面模板,如果你有需要可以添加相应页面。这样显示就更加丰富。
seo优化
这款主网站主题(模板)采用新的方式来进行seo,每个文章和每个页面都可以在自定义字段自己输入关键字和描述,分类的描述则是调用分类的描述(在 后台建立分类或者编辑分类可以自己写),关键字则是分类名称加上默认的关键字,更加自由化和定制化,如果你很懒,没有逐一设置这些也没关系,他们会自动显 示为默认的关键字的!
演示:http://www.themepark.com.cn/demo/?themedemo=moban09ys
下载地址:http://pan.baidu.com/s/1mggGe5U

wordpress主题图片瀑布流Collection

一款瀑布流风格的WordPress博客主题,此主题不但可以添加普通的图片,还可以添加链接、引用、音乐、日志和视频进行展示。内置seo功能,无需借助其它SEO插件。
101344.jpg
主题特点
瀑布流风格
后台管理
支持图片、链接、引用、音频、视频、日志等文章格式
多种页面模板
内置SEO功能

演示:http://demo.theme-junkie.com/collection/
下载地址:http://pan.baidu.com/s/1bnrNJqB

全屏创意WowWay响应式主题

WowWay响应式主题是一款非常华丽的WordPress主题,这款主题非常适合做企业展示主题,产品展示,另外还可以做图片站
WowWay WorPress主题,全屏创意主题。主题特点:独特设计,自适应,SEO,平铺ajax 作品展示,可筛选的作品展示,全屏相册,自定义滚动条,自定义背景等。
021844u7k1okl2ztlo6e7o.jpg

演示:http://demo.krownthemes.com/wowway-new/
下载地址:http://pan.baidu.com/s/1dDw3rnb

wordpress门户视频LoveVideo主题

这是一款80后影视制作投稿的视频门户网站主题,共享精神值得鼓舞。从演示网站可以看出,强大的网站结构和漂亮的界面,很多人都不敢相信是wordpress企业主题主题制作而成的。该主题适合做视频分享和电影站点,全局后台设置,有广告位设置,最主要的是这是一款seo主题。首页超大幻灯片展示,主题自带兼容国内各大视频网站。屏蔽了google api让你的网站访问速度达到最快。后台全中文界面设置,下载后好好看下。
024635bt55zwj2lwzt45bb.jpg
024634ybfq95sgfs5dl558.jpg
024636fq963b39cb9qb2xf.jpg

演示:http://www.80h-tv.com/sky/
下载主题:http://pan.baidu.com/s/1pJv2WcF

WordPress在线问答插件:DW Question & Answer

17391824020140207113546047.png
DW Question & Answer 可以为你的WordPress网站添加一个功能全面的在线问答中心。用户可以提交问题,搜索和按状态过滤的问题,得到别人的回答。用户可以评论和回复问题或答案,可以赞同别人的答案,可以设置问题的最佳回答。

主要功能:
提交问题 通过分类或标签排序问题 提交回答 选择问题的最佳答案 对问题和答案进行评论、投票 可定制的邮件通知 可以设置不同用户角色的操作权限 快速过滤问题 通过状态管理问题,比如待回答、已回答、已关闭等等 通过关键字即时搜索

插件演示
下载地址:http://downloads.wordpress.org/plugin/dw-question-answer.1.2.10.zip