返校前折腾一下WordPress

后天就要回长沙了,不知道是害怕到学校后不再有足够的热情和时间来调试博客,还是担心这会如上期一样严重影响到日常的学习,为了避免以上两个极端的出现,今天我索性就一次性集中地处理一下几个积压的问题。

目前已解决:

  • 在单篇文章的页面显示侧边栏;(用代码)
  • 显示相关文章;(用“无觅网”插件)
  • 本地保存Gravatar头像;(用插件)
  • 显示随机文章;(用代码)
  • 允许访客在刷新页面前重新编辑其留下的评论内容。(用代码)

未解决:

  • 把引用的代码显示得好看一点;
  • 实现访客在刷新页面后重新编辑其留下的评论内容。

——此处插入一段更新:在写这篇文章时,我想起一个问题,到底要不要屏蔽“百度爬虫”?经过一番权衡,我还是选择下手了。

现在,该是总结一下自己做出的各种努力了。(本文尤其适用于无相关背景知识的初学者。

调出侧边栏

之所以要干这么“无聊”、“没必要”的事,是因为我用的是WordPress的默认主题“Twentyeleven”,默认仅在首页显示侧边栏。在浏览单篇文章时,没有了侧边栏,连我自己都觉得很憋,必须后退到博客主页才能看到“RSS订阅”、“近期文章”、“标签云”、“外链”等是十分麻烦的事。因此必须改善这种情况。

“奋斗博客”的做法[1]是我找到的方法中比较简单的,不像别的什么还要建立“子主题”、修改css文件那么啰嗦(弄那些东西可以自定义最终显示效果的每一个细节),眼下我只是要让侧边栏显示出来而已。该方法只有两步:

  1. 修改主题的single.php文件。在后台管理界面中依次找到“外观-编辑”,再在右边的列表中找到该文件,单击即可进入编辑状态。然后,在中间的文本框中找到“<?php get_footer(); ?>”,在它前面回车。最后,在空出的上一行添加<?php get_sidebar(); ?>”(无引号)。其实,打开首页对应的文件index.php看一看,就会发现,它的末尾部分正是比single.php多了这么一行。(通过此文我才知晓,原来single.php的这个“single”是指“单篇文章”的意思啊。)
  2. 修改主题的function.php文件。这一步只是简单的注释末尾的几行代码而已,从“function twentyeleven_body_classes( $classes ) {”这一行开始,一路到“add_filter( ‘body_class’, ‘twentyeleven_body_classes’ );”。(若不明白,请打开原文链接。)扯谈一下,以前知道修改hosts文件科学上网时,“#”是注释符,也听说C语言中是用“//”注释,今天又长见识了,php语言的说明文字是夹在“/*”和“*/”中间的。

需要指出的是,原文最后的一句“再按照自己需要的样式来修改就可以了”确实一度让我纠结不已,直让我骂作者他娘啊。最后是因为在其它地方实在找不到更简单的说法,所以才抱着试一试(搞砸了也容易复原)的心理执行前面说的那两步修改的,结果什么错误也没发生,的确两步就可以打止了。

——更新一下,因为注释(不注释就不会显示侧边栏)了那一段代码,所以“页面(Page)”页面的右侧会留下空白的侧边栏(类似报纸“开天窗”),原本应该横过去的正文都被压住了。究其原因,我找到了page.php,发现在它最后是没有之前写进single.php的get_sidebar命令的,补上就好了。虽然我非常希望“页面”页面能够保持默认的样子,让文章占满整个显示界面,但是现在的我无能为力,什么css样式、div标签、php函数调用我都不会。所以,最后没办法,为了让“页面”页面不至于太难看,我暂且在page.php里添加了get_sidebar()函数。

显示相关文章

也就类似文章。有了侧边栏,可是界面依旧是干巴巴的,毕竟都不过是按时间的倒序排列的各种列表,也难免是死气沉沉的。

当时一边正在Google里搜索着,一边浏览着“潜行者M”的博客,其文章末尾的“无觅”让我眼前一亮——不用找了,就用它!

老早就在Google阅读器里感受了这个插件刮出的一阵雄风,我订阅的各种名博都用了,还代为推荐,现在我有了独立博客,终于可以体验一下了。

在后台管理界面中找到“插件-安装插件”,搜索“wumii”即可找到对应结果(好像当中就1条是中文的)。点击“现在安装”,完成之后“启用插件”即可。(相信这种安装插件的方式,对于和我一样懒得折腾的人来说是必须的。)因为人家都做成了一个插件,所以到了这里,基本上可以不管了,忍不住要设置的话,就到后台管理界面中的“设置”里找到“无觅”项看看吧。不过正如插件设置界面说的那样,更多的高级功能还是需要自己动手的,在此之前,可以到这里先睹为快。

随后我粗略地浏览了一下“网站管理中心”的“收录”概况。原来无觅会搜索文章的图片并生成缩略图,但我是个文字记录爱好者,力求图片链接失效也不影响文章内容(所以有图片的文章非常非常少),因此,我毫不犹豫地开启了“文字模式”。但更要命的是,我看到了“标签”项,看到了它下面那一列列的结果,这可愁死我了:我最看重的“策略”标签开始爆发危机了,策略实质上就是解决方案或者解决思路,是杂糅了“生活”分类和“网络”分类的,现在交错出现在“相关文章”里,怎能不让我后悔。现在暂且管不了这么多了,文章多了再看看吧,大不了删掉这个标签,反正我博客的写作主题之一就是积累“前车之鉴”。

要想显示其它网站的类似文章,需要先通过邀请进入无觅网络。根据上上段中给出的那个网站的评论信息可以了解到,它在目前仍在提供邀请码,但是我没有去留言申请。这是为什么呢?是因为“无功不受禄”,也是因为“尊重”。即便我可以质疑,他出现在搜索结果的头条位置是用了SEO的手段,打出这个标题也是为了积聚更多的人气,但是,我现在是有独立博客的人了,不应再是茫茫网海中的一名“不求付出,只求索取”的无知网民了,是的,从做人的角度来说,也没有白要邀请码的道理,尤其是如果还建立在我仅仅浏览这位陌生博主的这一单一页面(也就是贡献一个100%的跳转率)的基础之上。

Gravatar缓存插件

都用WordPress了,如果还不知道Gravatar是什么,就该好好反省了。简言之,只要用邮箱注册了Gravatar服务,那么在支持该服务的网站上留言时,只要在相应位置留下了邮箱地址,自己的头像就会是在Gravatar网站上留存的那样——全球通用哦,亲!

不过令人抓狂的是,由于社会太和谐,所以访问Gravatar的网站经常受到干扰,头像也就会因为“撕裂”而打不开,特别是在IE浏览器里只有一把红红的叉。曾听网友说过,把头像存在本地是个不错的办法

我一开始试用了据说是Gravatar官方出品的“WP-Gravatar”,可惜啊可惜,本身就是全英文,还他妈给出那么多的选项,而且不少长句解释看起来就一两个词的差异。对不起,我瞬间就想到了乔布斯,虽然我从没摸过苹果的产品,但我知道,他才不会让我选择这么多物极必反啊!被我删掉也就很正常了。

后来测试了“gravatar-mini-cache”,却问题不断。首先是无Gravatar头像的访客不再是我设置的“日志”头像(有点像电源开关的logo),而是成了“神秘人物”。然后自然是去看设置了,没想到那儿的列表显示的都是我的头像,看到我的头像显示在“怪物”之后,我真是气不打一处来!插件有这样的bug,自然是眼不见为快了。

再是看到了水煮鱼和月光博客推荐的“Gravatar Fixed”,界面简单,但原理却是强制访问www.gravatar罢了,要启用https访问方式还得博客本身支持(这又得花银子,买域名的时候我清楚地记得费用是好几美元每个月啊!)。后者就不说了,单就单纯访问www站点而言,我还是表示不放心。

最后我想到了helloyao曾推荐过的“GravatarLocalCache”[2],我只希望上天赐我好运,别再折磨我了。情况不错,装上并启用了这个插件后,效果真是立竿见影,还没等我修改设置(就1个选项)呢,打开评论中的头像,就看到了我的博客地址出现在了地址栏里。嗯,“神秘人”也没再出现。没错,本地化Gravatar头像就是用它了。

——小小更新一下,Forece’s Blog上有令人咋舌的代码法……

显示随机文章(此节较长)

就在调试侧边栏的显示时,我无意间看到了(引用)原文页面右侧的“随便看看”,忍不住心动起来。其实,人家就是Twentyeleven的主题,我当然会去看他的侧边栏恢复显示的效果……

说真的,这个功能也是我朝思暮想的,因为不确定,所以才完美嘛。我当即就决定,要立即不顾一切为博客添加这一份生机!

好吧,用鼠标手势打开了面页源代码,找到了“<aside id=”advancedrandomposts-5″ class=”widget widget_advancedrandomposts”>”和“<ul class=”advanced-random-posts”>”。果然,直接搜索“advancedrandomposts”就和当初也是依据面页源代码搜索“comment mail notify”一样,会有同名插件存在,第一条就是WordPress官方的插件页面呢。

联想到“随便看看”出现的位置是侧边栏,我的第一反应就是,“小工具”里没有这个啊!结果去搜,倒是“代码法”占据了更多城池,尤其是什么“WordPress啦”、“帕兰印象”给出的代码不过是那么简洁的几行。因为有过在侧边栏添加“文本框”小工具的先例,这一次我也就想当然地再添加一个了。试验之后,除了显示一个“·”(即“<li>”标签),什么都没有——我这才恍然大悟,“文本框”小工具里html代码可以写写,而php代码则是无效的

没有办法,只能硬着头皮面对眼花缭乱的代码了。我首先想到的就是用它制作一个小工具,毕竟这样在后台设置侧边栏时可以随意拖动;能绕过繁冗的插件总是好的。

在调试这个博客的过程中,我也逐渐了解到,有能力的博主都是“能用代码就不用插件”的,有点像人们“能打针就不输液,能吃药就不打针”那样。虽然没系统学过编程,也从来没掌握过什么编程语言,但浅尝辄止的我也知道,所谓程序是肯定少不了函数的调用的,跑来跑去则能不“累”呢。说到底,插件毕竟是插件,开放的API可以让开发者自由地组建模块,可保持相对的独立却又不可避免地降低了运行效率,拖慢网站整体的运行和读取速度。(外行话,勿当真。)最直观的结果就是,往往插入数行代码即可实现的功能,若要做成插件那就是一项浩大工程,这还不包括实现兼容各种主题的额外工夫在内。我已经慢慢地积累了10个插件了,必须换一种思路了。

回到实践中来。经搜索我发现,大家有的是另外编写php文件,然后上传,最后在主题的functions.php文件里添加语句进行调用,有的是直接往functions.php里贴代码,还有的我都懒得看了。原因只有一个,它们都在改变WordPress这个系统的整体格局——没有在插件“集合”的地方“报到”!其实,把该功能直接集成到默认小工具里不就完事了?

功夫不负有心人,我找到的资料显示,“wp-includes/default-widget.php”里放置的就是默认的小工具。找到这个文件要到网站(不是WP)后台去,如果是Cpanel控制面板,那打开“文件管理器”先找到wordpress系统所在文件夹(比如我的就在根目录“public_html”下),这时候就可以看到includes文件夹了。仔细翻看代码,没错,每个自带的小工具都有大概一页的代码,比如“近期文章”就对应着“recent_posts”那一块。

更令我欣喜的是主题的siderbar.php文件(好像是这个吧)中有如下的代码:

// Grab Twenty Eleven’s Ephemera widget.
require( get_template_directory() . ‘/inc/widgets.php’ );

。这意思大概就是说,我侧边栏里的小工具到inc文件夹的widgets.php文件中去调啊,而widgets.php肯定是要拉上默认的那几个小工具。这整个思路是多么明显啊:网站某一页面的显示,分别去问header、footer、sidebar等,siderbar里小工具的显示去找widgets.php要,而default也就是默认的小工具这时候就登场了。(此段所云不保证正确性)

苍天有眼,一下就让我看到语句形式类似的“wordpress公园”的教程[3]。虽然它的做法也是上传一个php文件,再去functions.php里调用,但是冲着它这个几近完美的模型,我决定把它变通着引入default-widgets.php里去。于是我又找到了WordPress官方的小工具制作说明(链接1链接2),或者网友的这一篇中文的实例演说可能更容易上手。如此一来,可以顺便确认和学习一下制作过程。

然而对照着官方说明,教程所呈现的代码显得很无序,所以我花了很久的时间进行调整(结果在)。这些代码都要贴到类似

}

 

/**

这样的空行当中去。(最好是先多空出两行,再在正中间添加,便于以后查阅、还原。)

教程里说的“注册”小工具,我也偷懒,取其3行中的中间那行“register_widget(‘Random_Posts’);”,加到最后位置的

register_widget(‘WP_Nav_Menu_Widget’);

 

do_action(‘widgets_init’);

正中间。(同样多空两行再插入。)

在调整的过程中,因为不喜欢给出的名字,如“the_rand_posts”、“RandomPostsWidget”、“randomPosts”,但我又担心命名有缺漏会导致代码运行错误,所以索性都改成了“Random_Posts”。(事实上,只要查询时没有2个或2个以上结果的,就说明不可能被调用,但改无妨。)

最后在博客上执行时还是出现了3次错误,还好WordPress会告诉我是第几行:

  • 一次是空白符引起的,也就是多余的空格和(或)tab分隔符;
  • 两次是命名时有缺漏

本来到这里应该就结束了的,可是我竟然发现了“PHP Code Widget”插件,看说明貌似是在“文本框”小工具里写php也能执行……我了个去啊!

让访客刷新页面前重新编辑评论

这个我折腾了好久,其实像我这样的系统默认的“合格”主题,直接按willin说的[4](可能该文章到这里看起来更舒服一些)做就是了。如果是用的别的主题,那就要仔细看看原文的提示,考虑“标不标准”的问题了。

没能折腾好代码引用

很多博客的正文有代码出现时,都会嵌在一个个看起来很舒服的框框里。我知道这和什么css样式有关,但是现在没空去理会了。

没能实现访客刷新了也能修改评论

荒野无灯的评论区很有特色,不管刷新了还是不刷新,访客都能修改原评论。可是我能力有限,尚只能套willin的成品,按这位Geek的文章进行操作反倒会出错。现在估计我也把人家问烦了,算了,有空好好学学php和js,自己动手,丰衣足食。一想到《提问的智慧》啊,我就觉得它有时候真的很害人:既要求提问者说话要经过大脑(不能只知道索取而从不付出努力),又迫使回答者欲言又止(问得有多深直接导致答能到什么地步)。

屏蔽百度

按月光博客说法[5],单单在robots.txt里对Baiduspider进行Disallow是不够的,还得在网站根目录的.htclass文件里加几句(具体参见原文)。

其中会遇到一个问题,就是找不到robots.txt,其实访问“http://yourdomain.com/robots.txt”看到的页面是临时生成的,如同Windows临时文件即用即生成……自己写一个txt上传到网站根目录才是硬道理。(参见这篇文章。)

简短总结

  • 这次的经历,再次验证了“我想得到的别人早就实现了”这句话,而我所欠缺的就是背景知识。事实很残酷,我不是计算机专业的,知识断层太多太多,再有时间去自学,短期内也终究是能力有限的。
  • 某个不等号的表示应该是:代码>>插件。
  • 即便知道用“Ctrl+F(H)”来查找或替换,可有一个好的编辑工具还是必须的(比如自带有中文包的Notepad++),否则要在没有行数标记的文件里找到给出出错行数的那一行代码,无解。
  • 使用默认主题,麻烦少,同时能更好地学习WordPress本身。默认的都能玩得转,那才是真本事。

参考资料

[1] WordPress 默认主题 Twenty Eleven 添加侧边栏 | 奋斗博客
[2] 盘点一下我在用的Wordpress插件 | 你好,Yao!
[3] 简单三步实现wordpress不用插件的侧边栏随机文章小工具功能 | wordpress公园
[4] WordPress 內置嵌套評論專用 Ajax comments | Willin Kan
[5] 屏蔽百度爬虫的方法 | 月光博客



返校前折腾一下WordPress》上有11条评论

  1. 呵呵,努力折腾吧。
    看到文章中说把我问烦了,可能你误解我意思了。
    我是觉得,在标题为“评论测试页”中的文章中问博客中其它文章中的问题总是不合适的。后来就加上了一条说明。希望大家到相应的文章中回复。因为,测试页面中的评论会随时删除,如果有初学者遇到同样的问题,如果是在相关文章页面的评论,那么他google到可能能在文章页面找到答案。
    “提问的智慧”是篇好文章,我在WP中文论坛发现有好些人不太会提问,帖子看得我头大……

    • 这是我的过失……荒野无灯有这等心胸,后生很是钦佩啊。

      说到“提问的智慧”,真是“害人不浅”,让我提问时总是小心翼翼,有机会了也不敢上前回答。

  2. 收藏了,这篇文章学了不少的东西,好多都是我没见过的呵。连荒野都来回访哈。不过要我个人说,官方的博客模板,挺不错的,就是太过于规范,你可以看一下代码,注释、以及各种css hack代码太多了。因为这个模板要面对全世界,所以必须要这样。所以我总感觉,这个模板太过于臃肿。

    • 不管怎么说,先了解默认的,一直都是我学习一个新鲜事物的做法……而且“回到原点”也是一个永恒的话题。

  3. 还有,不知道为什么,你这边网站经常打不开,刚刚试了一下,荒野前辈的网站也打不开。我这边的网络啊。。。

  4. Pingback引用通告: 浏览器的显示效果不同的问题出在CSS代码上面 « 潜行者M United States WordPress Unknow Os

    • 那就只好按照引用文章的方法进行修改了,毕竟那是别人按照自己的理解和习惯写出的代码。希望能帮到你。

发表评论

电子邮件地址不会被公开。 必填项已用*标注