wordpress显示腾讯微博信息

wordpress没有类似于微博的功能,只能发表文章,有时有个想法,或看到一个好句子或者想简洁的说说现在的状态,总不能全都是去发文章吧,于是想到了添加个类似微博的功能,一路坎坷,总算是完成了!!

接下来说说完成这个功能的经历:

1.最开始的想法是基于wordpress,完全独立做个简单微博功能,在数据库中添加一个微博的表,自己写发表和显示的功能.虽然说这样的难度不大,不过老是上wordpress来发表不太方便.而且以后维护好像也不方便,就放弃了这个方法.

2.利用腾讯微博的微博秀,这个最简单,腾讯微博开放平台可以申请,得到一个iframe页面,会显示微博信息,样式也可以设定,用了几天后实在受不了,连接速度实在太慢,这性能简直是在给腾讯抹黑啊…..再次放弃……

3.利用腾讯微博api,这个速度还不错,只是需要自己解析数据,可以返回json或者xml数据,于是准备用这种方法,不过我对js不了解,在获取远程数据上出了问题,于是打算用php实现,可是wordpress的widget不支持php代码,于是只能自己自定义一个widget来实现.

3.1首先是直接添加了一个自定义的widget,内部直接用php通过微博api获取微博的数据再显示出来,但是由于本站使用了wp super cache插件,这样的后果就是如果不刷新缓存文件,微博的信息就不会更新.

3.2于是想到widget的功能改为php获取信息后处理成可以显示的格式后保存到服务器上作为缓存文件,然后widget再用js的方式引用这个文件实现动态加载.由于本站还使用了wp minify插件,所以还得把这个js文件加入排除列表.于是这个功能就算是完成了!

3.3然后又考虑到了如果这个api调用速度问题,虽然现在看起来是很快,但是难保以后会不会出问题,于是想到了后台更新缓存文件.这暂时就是最终版.

具体流程就是自定义一个widget,他有两个工作,首先是使用后台的方法调用一个php页面,这个php页面负责更新缓存;再就是就是输出用js引用的方式调用缓存文件的代码.

然后辛苦完成了以后,悲剧了,这个功能可以简化,完全可以添加一个wordpress内置的文本widget,然后写上引用缓存文件的js代码就可以了,最后经过优化,写出了一个php文件,只需要在文本widget中用js引用调用这个php文件就可以完成信息加载和缓存的功能了.

附上该php代码:

//weibo.php
<?php
if($_GET["updata"]=="1"){
	date_default_timezone_set('PRC');
	$ch = curl_init("这里填写你的api url ,申请方法看下面") ;
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; 
	curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; 
	$json = json_decode(curl_exec($ch),true);
	$data= "<ul>";
	foreach($json[data][info] as $value){
	    if($value["text"]!=NULL){
	         $data.= "<li>".$value["text"]."<br/><font color=808080>".strftime("%Y-%m-%d %H:%M", $value[timestamp])."</font></li><hr>";
	    }
	}
	$data.= "</ul>";
	$data = "document.write("".str_replace(""", "\"", $data)."");";
	file_put_contents("weibo.cache",$data);
}else{
	echo file_get_contents("weibo.cache");
	$fp = fsockopen($_SERVER["HTTP_HOST"], 80, $errno, $errmsg);
	if(!$fp) {
		echo "$errstr ($errno)<br>rn";
	} else {
		fputs($fp,"GET $_GET[path]/weibo.php/?updata=1 HTTP/1.0rnHost: $hostrnrn");
		fclose($fp);
        }
}
?>

然后在文本widget中加入js代码:

<script type="text/javascript" src="主题路径/weibo.php/?path=主题路径"></script>

因为我把php文件放到主题目录里面了,所以上面需要加入主题路径,如果把php放到网站根目录,那么js代码就是:

<script type="text/javascript" src="/weibo.php"></script>

而weibo.php文件的代码也需要修改一处:

fputs($fp,"GET $_GET[path]/weibo.php/?update=1 HTTP/1.0rnHost: $hostrnrn");
//修改为
fputs($fp,"GET /weibo.php/?update=1 HTTP/1.0rnHost: $hostrnrn");

功能说明:

调用weibo.php后会读取目录下的weibo.cache文件,然后把它echo出来,之后weibo.php后台调用自己,不过加上了参数update=1,weibo.php发现update的值为1就会执行更新缓存weibo.cache的操作.

这个代码只是简单的显示了自己发的微博的文本内容,使用的api是https://open.t.qq.com/api/statuses/user_timeline?

完整的api请求可以到微博开放平台调试里面自动生成,API在线调试

步骤:

首先授权:

我选择的oAuth2.0授权(其他也可以,可能有些东西要改)

填入你自己的App Key 和 App Secret 确认授权,没申请应用的话暂时用这个页面默认的测试appkey也可以.

然后页面内填写:

fomat => json
reqnum => 填写你要拉取的微薄条数
name => 你要拉取的微博的id

然后点发送请求

下面有个header信息,GET后面 /api/statuses/user_timeline?….一直到HTTP/1.1 之间的部分记录下来,不包括HTTP/1.1
你的api地址就是https://open.t.qq.com/加上刚才记录的地址.
如果是另外两种授权方式就不是https , 而是http .

bug:

1.第一次读取会出错,因为读取在写入之前,所以是读的不存在的文件,刷新一次就正常显示了
2.同样由于先读后写,新的微博信息需要刷新2次才会显示.

之所以先读后写是为了避免一些问题,比如读的时候写操作还没完成……造成的这两个bug我觉得可以接受.

备选解决方案:

1.读取缓存前先判断缓存文件是否存在.

2.先写入缓存再读取显示.

另外在file_put_contents函数中可以加入LOCK_EX参数,锁定文件,避免可能发生的并发冲突,不过没测试锁定文件是否对读取造成影响,希望以后能找到更好的解决方案……

如果把缓存放到数据库,然后使用crontab定时更新缓存,这样缓存更新就和用户访问隔绝开了,应该是个比较好的解决方案!

wordpress文章加版权信息

虽然我一直赞成开源共享的精神,并且我自己也尽力这样做着,但是这也无法阻止我想要留名的小虚荣……

wordpress没有内置的版权功能,也许有插件可以实现,不过插件我是能不用尽量不用,于是想着自己靠代码完成.

首先分析问题,wordpress文章内容输出的代码是在主题里面的,虽然网上有很多教程教你怎么让文章加版权,但是莫名其妙的是基本都是仅限于特定主题,让你到那个文件改哪段代码,也许这样输出是官方文档的标准推荐的输出方式?所以是通用的??

不过很显然,我对wordpress的改造中发现这类修改法完全不适用,要么我没有该文件,要么有该文件但是文件内容和”教程”不符,如果这是标准推荐,那么我只能说是我运气实在太差,用的模版全是野路子?

没办法只好自己想办法搞定了,以上都是废话,下面才是正文^_^!!

首先把模版文件下载到本地,如果是直接从wordpress下载的应该是zip压缩包,没有的话自己到网站目录把主题打包下载下来,然后利用winrar的搜索功能(其他压缩软件一样可以)查找代码.

比如文章加版权,首先基本逻辑了解一下,找到文章内容输出的代码->在文章输出代码结束后加上自己的代码,即版权信息.

百度google什么的都可以,翻wordpress官方文档也可以,找到了主题中文章输出是用的the_content()函数,于是在主题的压缩文件内直接搜索该字符串,于是可能会发现一到两个文件包含该代码(也许更多),那么接下来就简单了,在每个文件的the_content()后面,加个

echo "版权信息";

就行了.

注意:也许并不是每个文件的the_content()函数都会使用到,因此建议的做法是,搜索到多个文件时,每次只修改一个文件,修改后,看文章内容是不是加入了,没有加入就恢复该文件,修改下一个文件,直到发现哪个文件的the_content()是在起作用的就好了,并不需要每个都改,因为也许有的the_content()是用来输出其他类型的东东,也许并不适合相同的版权信息.

下面附上本站主题修改过程:

首先下载了主题包renegade.2.1.2.zip,发现有三个文件有the_content()函数调用,分别在index.php,page.php,wide.php中,the_content()的后面依次加入版权信息的代码

//...
the_content();
echo "
<hr />
<table>
<tbody>
<tr>
<td><span style="color: #159519;">名称:";
the_title(); //调用当前文章标题
echo "地址:";
the_permalink(); //调用当前文章url
echo "
本文发表于<a title="下弦古月" href="http://devsk.com">下弦古月</a>的博客,转载请注明,谢谢</span></td>
</tr>
</tbody>
</table>
";
//...

最后发现实际只有index.php加入的代码起了作用,于是本次修改就算完成了,其他两个文件应该都是页面模版,大概是创建新页面时的模版,如果需要显示版权也一样可以加入.

其实个人觉得这篇文章讲的加版权本身意义不大,更重要的是讲了一个如何修改的方法,不仅仅用在wordpress,其他的地方一样可以用,我要修改一个东西,并不需要把他完全弄懂,只要知道自己要干什么,然后定位该功能的位置,仅仅修改局部就行了.当然了局部的做法就有局限性,比如当我加入了版权信息后,想修改样式,结果发现不起作用,原因是主题自带的css已经指定了样式,因此要修改样式也比较麻烦,所以能去完全搞懂自然更好了!!

值得推荐的十几个wordpress插件

Akismet

很棒的反垃圾评论插件,新版wordpress为内置插件,使用需要申请一个密钥(免费),用邮箱注册一下就好了,十分简单,至少胡乱滚键盘打出的评论是无法通过的,哈哈!

All In One SEO Pack

用户非常多的seo插件,有收费的专业版,不过免费版也足够使用了,貌似对于我来说,似乎仅仅用于ping搜索引擎和生成sitemap,反正个人站点对seo没什么需求.

Better WP Security

方便的对wordpress一些可能有安全隐患的地方进行保护,内置了数据库备份功能,修改后台地址,防暴力破解,比较不错,不过也谈不上必备插件,看个人喜好选择.

失效链接检查器

检查文章中的失效链接和丢失的图片,检查的信息会在仪表盘有显示。

Comment Reply Notification

很不错的插件,可以让评论者自己选择是否接受回复的邮件提醒,当然也管理员也可以设为强制全部邮件提醒,邮件内容可以自定义,支持html,而且在后台评论页面的回复也是会有邮件通知的,很棒!不过可能有的主机发件人地址会是 域名@主机名.com,这种情况有两种方法解决一种是修改插件代码,自己定义发件人地址,或者使用smtp插件.推荐使用smtp插件,因为这样可以方便的统一你的网站发出去的邮件地址,否则很多地方都得自己改代码,php不太懂的可能会觉得比较麻烦.

Easy WP SMTP

发邮件的插件,自定义发件地址和发件人,使用后正常情况下全站的邮件发送都会使用这个地址和发件人.

Simple Comment Editing

可以让访客在指定时间内编辑自己的评论内容,非常简洁的插件,没有设置界面,启用后简单的在评论内容后显示编辑选项和剩余时间,同样,由于十分简洁,没有应用什么样式,所以理论上可以与和主题很好的结合,而且方便自己去设计样式.使用中有个问题就是与WP-UserAgent插件冲突,启用WP-UserAgent后,编辑选项不会出现,解决办法是WP-UserAgent显示方式设为自定义,手动在主题内相应位置添加显示代码.另外它还有高级版为WP Ajax Edit Comments(同样免费),功能很强大,不过我使用时可能与主题冲突还是别的问题,虽然功能正常但是显示效果不能接受于是放弃了,有兴趣的推荐试试!

SyntaxHighlighter Evolved

一款代码高亮插件,使用时需要手动在代码开始和结尾添加相应简码,设置内可以选择2.x和3.x版,建议2.x,这样代码右上角会有显示源代码,复制源代码,打印源代码的按钮

UpdraftPlus – Backup/Restore

备份插件,可以定期向主流网盘或邮箱备份网站文件和数据库,很实用的工具,不过免费版对于文件备份似乎只支持几个目录,不过如果不是自己手动在外面建立文件夹就没问题,主题,插件,上传目录免费版都是默认支持备份的(可选)

WP-UserAgent

在指定位置显示评论人的系统和浏览器信息,该插件可能和一些其他的在评论区域显示内容的插件有冲突,解决办法是显示模式选择自定义,然后手动在主题内相应位置添加显示代码.

WP Lightbox 2

一个灯箱插件,让网站的图片显示更好看,网站的图片点击后会展开一个浮层来显示图片,并且可以直接显示上一张或下一张图片.很实用

WP Slug Translate

很棒的插件,网站设置文章名为固定链接后,中文的文章名自动翻译为英语(仅对url有影响,不会把文章标题改成英文)

WP Smush.it(本站已暂时停用该插件,后续版本兼容性需自测)

图片压缩插件,自动对上传的图片进行压缩,好像对文件要求小于1M,会使用外部api,如果开了防盗链就无法正常使用,除非手动添加例外,有兴趣的可以试试.

WP Super Cache

网站提速的利器,设置好后不仅提升访问速度,也减轻服务器压力,如果你的网站速度不够理想,完全可以试试这款插件!

WPtouch Mobile Plugin

提供手机版的wordpress界面,免费版功能也够用了,界面很精致,值得推荐!

Revision Control

新的wordpress拥有版本控制功能,虽然这个功能的确很棒,但是我想大多数情况下历史版本本不是作者有意保留,然而在频繁修改的情况下可能历史版本过多,这显然是一种浪费,本插件可以控制历史版本,设置允许保留的历史版本数,并且可以自由删除指定历史版本,启用后,在文章编辑页面就会显示历史版本,可以自由的删除!(如果没显示,需要在页面)


注意:

本文内推荐的插件是本站正在使用的插件,测试在wordpress3.8上使用无兼容问题,均为免费插件(部分插件同时提供收费的专业版).

本站wordpress版本以及插件均使用官方最新版,以上插件未经特殊说明,则表示与最新wordpress版本无兼容问题.

以上插件可以在wordpress后台的插件安装的收藏中搜索devsk,即可查看本站所有安装的插件(部分未启用).

以上插件使用中如有任何问题,欢迎留言讨论!