我的wordpress使用的主题、插件及针对浏览体验和SEO方面的一些修改

我使用的是wordpress2.2.1带中文包版本,由于对下载来的wordpress及其模板、插件都作了一些修改。特地把这些变动记录一下备忘和供朋友参考。

1、模板:
选来选去,用了http://wordpresstheme.cn/category/chinese/上的blogool.org WordPress Theme,原效果图如下:
blogool.org WordPress Theme
下载来的模板(littlebat于2009年8月16日后注:我发现今天不能打开这个主题的发布网址了,另一个有效的网址是:blogool.org WordPress Theme Released),在header.php和sidebar.php去掉了blogool.org自己专有的东西,把logo的位置变了,弄不懂它里面的logo是怎么链接的,删掉了原来的logo链接,在后面加了logo:

日记

另外在右上角加了主页和标签的链接。

2、使用的插件
1)、中文 WordPress 工具箱1.2
作者的说明如下:

用来解决官方 WordPress 没有照顾到的中文相关问题。使用这个插件,你可以显示随机文章,最新留言(最新引用),留言最多文章,发表评论最多的网友,还有真正的文章摘要,等等,真正截断,没有乱码。 作者:桑葚

我使用了:最新日记,最新评论,随机日记的功能;

2)、Jiehoo Bookmark1.0
主要是用来把日记加到一些网摘上;

3)、Simple Tagging1.6.8,可从这里下载。
一个强大的tag(标签)插件,我使用了其中的:标签,相关日记,标签云(tag cloud)的功能,和最常使用标签(修改了代码)的功能。
实际上,我先用的是Jerome’s Keywords,这个插件在WordPress 2.1x以后,每次有人评论,该贴原来设定的tag 就被清空。我的2.2.1也是如此,就算是垃圾评论来了好像也会清空被评论日记的tag。现在用simple tagging插件,可导入Jerome’s Keywords的tag。
使用这个插件要注意,在实现tag cloud的时候,如果要把您以前所有的tag都包括进来,一定要把“Maximum number of days to be considered:”(最大过去天数)改成您的最早日记以前,默认是包括1年内(365天)的日记。我的改成了2000

因为我的日记的tag使用次数差距大,默认的设置显示不明显。作了下列修改:
(1)、Cloud tag separator(s):设置成了空格;
(2)、Tag count scaling maximum:设置成了300,据使用经验看,大概是数字越大,不同使用次数的tag的颜色和字体大小层次分得越清楚;
(3)、Most popular font size:设置成了28,使使用次数多的tag的字体更大一些。
实现tag cloud需要把下载来的文件解开后的目录wordpress 2.2 template files for default theme (kubrick)中的pagetemplate.tagcloud.php拷到您使用的theme的目录下。创建一个以它为模板的页面,这个页面就是您的tag cloud页面了。
另外把上面相同目录下的style.css中
/**
* Style for Simple Tagging Plugin
* http://sw-guide.de/wordpress/wordpress-plugins/simple-tagging-plugin/
*/ 后有关这个插件的部分拷到您的style.css后面。
为了适应我的tag cloud需要,对这部分的下面代码作了一点改动:

ul#tagcloud { padding:0; margin:0; text-align:center; list-style:none; }

改成下面这样:

l#tagcloud { padding:0; margin:10px; text-align:left; line-height: 300%;
list-style:none; }

使标签向左靠齐,与四周留点空隙和增大行距。

(4)、实现最常使用标签功能
我发现在simple tagging插件中没有像Jerome’s Keywords那样有专门函数来实现这个功能,于是添加了一个函数,调用实现tag cloud的函数来在侧边栏实现了这个功能。
方法如下:
在“插件编辑器”中打开“simple-tagging/simpletagging.php ”,添加如下函数:
注意:以下请把全角的“<”和“>”换成相应的英文符号!

function STP_TopTags($linkformat=null, $tagseparator=null, $include_cats=null, $sort_order=null, $display_max=null, $display_min=null, $scale_max=null, $scale_min=null, $notagstext=null, $max_color=null, $min_color=null, $max_size=null, $min_size=null, $unit=null, $limit_days=null, $limit_cat=null, $exclude_cat=null) {
echo STP_GetTagcloud($linkformat, '<br>', $include_cats, 'desc', 10, $display_min, 0, $scale_min, $notagstext, $max_color, $min_color, $max_size, $min_size, $unit, 2000, $limit_cat, $exclude_cat);
}

然后,在您要使用的模板上加上<?php STP_GetTagcloud() ; ?>就行了。
上面在调用生成tag cloud的函数基础上指定了一些参数(即上面没有$的项),从左到右意思如下:

'<br>'-标签的分隔;
'desc'-标签按使用次数从多到少排列;
10-开出前10个;
0-关闭按次数变颜色和字体的功能;
2000-包括2000天前以内的tag。

3、SEO(搜索引擎优化)方面作了一些修改,但主要的宗旨还是针对浏览者体验上作了一点优化。
1)、关于页面的title属性的修改:
网上说title属性做成“文章名称 - 文章分类 - 网站名称”类似的比较好,但wordpress自有的是相反的顺序。
网上有专门的插件,我的方法是直接修改代码如下:

(1)、修改文件/wp-includes/general-template.php,主要是根据wordpress内部工作时调用的查询参数来判断,如tag是"/?tag=java",我就可以确定tag的title,以此类推。要说的是,这种硬编码的方法不好,但是自己用比较方便。

function wp_title($sep = '-', $display = true) {
global $wpdb, $wp_locale, $wp_query;

$cat = get_query_var('cat');
$p = get_query_var('p');
$name = get_query_var('name');
$category_name = get_query_var('category_name');
$author = get_query_var('author');
$author_name = get_query_var('author_name');
$m = get_query_var('m');
$year = get_query_var('year');
$monthnum = get_query_var('monthnum');
$day = get_query_var('day');
$tag = get_query_var('tag'); //添加标签的标题
$title = '';

// If there's a tag,添加标签的标题
if ( !empty($tag) ) {
$title = $tag;
}

// If there's a category
if ( !empty($cat) ) {
// category exclusion
if ( !stristr($cat,'-') )
$title = apply_filters('single_cat_title', get_the_category_by_ID($cat));
} elseif ( !empty($category_name) ) {
if ( stristr($category_name,'/') ) {
$category_name = explode('/',$category_name);
if ( $category_name[count($category_name)-1] )
$category_name = $category_name[count($category_name)-1]; // no trailing slash
else
$category_name = $category_name[count($category_name)-2]; // there was a trailling slash
}
$title = $wpdb->get_var("SELECT cat_name FROM $wpdb->categories WHERE category_nicename = '$category_name'");
$title = apply_filters('single_cat_title', $title);
}

// If there's an author
if ( !empty($author) ) {
$title = get_userdata($author);
$title = $title->display_name;
}
if ( !empty($author_name) ) {
// We do a direct query here because we don't cache by nicename.
$title = $wpdb->get_var("SELECT display_name FROM $wpdb->users WHERE user_nicename = '$author_name'");
}

// If there's a month
if ( !empty($m) ) {
$my_year = substr($m, 0, 4);
$my_month = $wp_locale->get_month(substr($m, 4, 2));
$my_day = intval(substr($m, 6, 2));
//$title = "$my_year" . ($my_month ? "$sep $my_month" : "") . ($my_day ? "$sep $my_day" : "");
$title = ($my_day ? "$sep $my_day" : "") . ($my_month ? "$sep $my_month" : "") . "$my_year";//改成了:日,月,年的顺序
}

if ( !empty($year) ) {
$title = $year;
//if ( !empty($monthnum) )
// $title .= " $sep " . $wp_locale->get_month($monthnum);
//if ( !empty($day) )
// $title .= " $sep " . zeroise($day, 2);
//如上,改变日期顺序为: 日,月,年
if ( !empty($monthnum) )
$title = $wp_locale->get_month($monthnum) . " $sep " . $title;
if ( !empty($day) )
$title = zeroise($day, 2) . " $sep " . $title;
}

//If there is a post
//if ( is_single() || is_page() ) {
// $post = $wp_query->get_queried_object();
// $title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) );
//}
//日记和页面的标题分开,并在后面加上区分
if ( is_single() ) {
$post = $wp_query->get_queried_object();
$title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ) . " $sep " . '日记';
}

if ( is_page() ) {
$post = $wp_query->get_queried_object();
$title = strip_tags( apply_filters( 'single_post_title', $post->post_title ) ) . " $sep " . '页面';
}

//为分类,作者,标签的标题添加区别
if( !empty($cat) || !empty($category_name) )
$title = $title . " $sep " . '分类';

if( !empty($author) || !empty($author_name) )
$title = $title . " $sep " . '作者';

if( !empty($tag) )
$title = $title . " $sep " . '标签';

//去掉标题前面的分隔符
//$prefix = '';
//if ( !empty($title) )
// $prefix = " $sep ";

//$title = $prefix . $title;

$title = apply_filters('wp_title', $title, $sep);

// Send it out
if ( $display )
echo $title;
else
return $title;
}

还有一个修改的地方是在您使用的模板中的header.php文件在相应位置作了下列的修改:
<title><?php if(!is_home()){ ?><?php wp_title(); ?> - <?php } ?><?php bloginfo('name'); ?></title>
最终的效果就是:

我的wordpress使用的主题、插件及针对浏览体验和SEO方面的一些修改 - 日记 - 学习日记
linux - 标签 - 学习日记
java - 分类 - 学习日记
littlebat - 作者 - 学习日记

2)、把主页和分类页、标签页等都只显示列表,不显示具体内容。
理由:我认为这些页面只起个信息的组织作用和导航作用,我的标题和分类、标签就反映了这篇文章的大概内容,查找使用方便,突出了日记页面的内容。
另外,关于右侧侧边栏的内容包含在每页会不会影响搜索引擎收录呢?我认为不会,我觉得搜索引擎应该知道这是网站每个页面的导航部分,收录时应该忽略这部分在内容中的份量。况且,主要是每页有这个侧边栏方便大家浏览。如果,这部分侧边栏真的严重影响搜索引擎收录,我以后可能会作一些调整;

3)、永久链接,动态页面伪静态化
为了与以前的系统相一致,日记页面使用如/archives/diaries/文章id.htm的形式,因为本站近3年来有过几次url调整,因此使用不少.htaccess文件中的mod_rewrite重定向,见日记:学习日记利用apache的mod_rewrite模块的全套重定向方案

4、google广告
我认为:不要排斥广告,我在使用这个blog工具为自己和别人带来帮助的同时,也为商家和用户起了一个搭桥的作用,虽然一般的草根blog想靠这个吃饭是空事,但是“聊胜于无”,所以,我在header.php和footer.php中以及内容的末尾加了广告代码,个人感觉应该不会给使用带来较大的负面影响。我不管怎么改,也绝不会像现在有些下载站,下载一个东西要躲过一重又一重的广告陷阱,结果说不定还弄过劳而无获:(

5、额外的收获
本来我对php是一窃不通,这几天修改wordpress及其模板和插件中的代码,对php也有了一点知识了。我想自己以后如果这种阅读和修改代码的事情做多了,说不一定哪天自己还能写个小插件呢:)

6、wordpress的模板和插件很多很多,我觉得目前我用的插件是最基本的,应该说大部分使用wordpress的朋友用的插件都比我的多吧。今天写了一晚上,就到此为止了。以后,我会把系统的一些改动总结在这里。欢迎大家批评指正。谢谢。

16 thoughts on “我的wordpress使用的主题、插件及针对浏览体验和SEO方面的一些修改”

  1. 好险,幸亏昨天换成了simple tagging的tag插件:(

    因为Jerome's Keywords这个插件停止了维护,不适合我的新版的wordpress2.2.1 了,一有评论就会清空日记原来的tag。由于前几天的几十条垃圾评论,导致我几十篇日记的tag都被清空了。

    不知是昨晚还是今晨,一个家伙一口气往我的blog上发了39条垃圾评论。要是我昨天没有换掉Jerome's Keywords插件就损失有点大了。

    呵呵,再坚持一下,不安装反spam插件。等情况严重了再说:)

  2. Pingback: pingback
  3. 开启了wordpress自带Akismet反垃圾评论插件

    这几天几乎每天都有好几条垃圾评论,于是开启wordpress自带Akismet反垃圾评论插件。

    开启方法如下:
    在插件管理页面开启Akismet插件;
    到WordPress.com上申请一个帐号,然后系统会发一封邮件给您;
    把邮件里的那个WordPress.com API key填到Akismet的配置页面中验证后即开启了这个插件。

    使用后感觉不错,今天就截获10多条垃圾评论,无一错杀和漏网;)

  4. 前一段时间曾把侧边栏的内容去掉得只剩搜索框,搜索流量上来之后,后来觉得加上侧边栏的内容可能更有助于用户浏览,于2007年8月20日15:36又加上了侧边栏(同首页一样的内容)。

    我在观察这对搜索引擎的收录有影响没有。百度方面我新发的日记基本上第二天就能搜到。但是google方面,我在8月19日发了一篇日记被收录了,隔了几天的8月23日后发的5篇日记都没有收录,而前几天我的日记基本上第二天就能被收录。不过,这几篇日记在google的blog搜索中又找得到。不知跟我间隔几天才写日记的缘故,还是修改了侧边栏的缘故?还有,难道google的blog搜索和google的web搜索的索引是独立的吗?

    暂时估计是修改了侧边栏google对本站的收录情况进行调整。继续观察中。。。

  5. 8月23日~8月25日的6篇日记在8月29日晚上查己被google收录,早上查还没有收录;
    加了侧边栏的流量与没有加差不多。

    从搜索文章在google搜索结果的摘要来看,是收录的文章内容,而不是内容份量大于真正文章的侧边栏内容(百度也是,不过网址的域名部分仍是java.learndiary.com)。也许,google已经知道了右边侧边栏并不应该是页面内容,而是导航部分。

    再观察一段时间,看内容比较多的、每页都含有的侧边栏对搜索引擎收录有影响否。。。

  6. 经过约2周的观察,加上右侧边栏与去掉右侧边栏好像对搜索引擎带来的流量没有什么明显的影响。以后不做这些实验了,我又不是专门想做这个的,把时间花在这些事情上没意思。按大家通常的做法就是了。再说,这么短的时间的“实验”结果也没有多大的实际意义。
    以此类推,按博客通常的做法,在文章列表的页面(包括主页),使文章的内容显示出来了。我现在也感觉这样的形式更有利于别人浏览。可见,人的感觉和想法是不断变化的。长点的日记可以采用more标签来在列表上显示摘要。

  7. 2007年9月7日,作了如下改动:
    使文章列表显示了全文,并增加最近日记、评论和随机日记条数为10条(原5条);侧边栏顶增加google搜索框,google广告改为页内的468*60横幅(列表页3处;文章页文末一处,如有评论在评论末一处)。
    但是,不知是上面改动的哪方面影响了百度,从9月10日起到9月13日,已经连续4天,百度在搜索流量的比重从约35%下降到约10%,大概少了100个IP;google方面的流量没有什么明显的变化。
    于是,我于9月14日凌晨1点左右,将google方面的搜索、广告回到原来的样子---即只有一个页首728*90横幅广告。而模板保持不变,大家基本上都是这样的。
    同时,将广告回复原来的样子,便于检验取消google adsense的区段定位后的广告与本博客内容的相关性是否变好。
    继续观察中。。。

  8. 中文 WordPress 工具箱mulberrykit.php里的随机日记函数改动了一下,如下:
    function random_posts ($limit = 10, $length = 400, $before = '<li>', $after = '</li>', $show_pass_post = false, $show_excerpt_in_title = true)
    //去掉原插件title属性里面的摘要输出,只输出文章标题
    //$post_strip = substr($post_content,0,$length);
    //$post_strip = utf8_trim($post_strip);
    //$post_strip = str_replace('"', '', $post_strip);
    $post_strip = "到《".$post_title."》的永久链接";
    随机日记等的调用函数前后加上了<ul>和</ul>,不然的话只有<li>。
    网页顶部的广告几乎无人点击,改为内插在日记右上角,效果有所起色,但时间短,还不能下结论。

  9. 2007年9月16日,添加了留言本插件:WP-Guestbook-Paged (en),这个插件可以选择支持分页和不支持分页,选择分页支持时不需要另外的的插件。如:这个留言本插件:Guestbook Generator就需要另一个分页支持的插件:Paged Comments

    WP-Guestbook-Paged (en)这个插件没有中文化,为了显示中文信息我在源码中作了一点改动。修改了的简单中文支持的wp-paged-guestbook模板文件wp-paged-guestbook.php文件:

    在首页右侧栏增加 del.icio.us 的 link rolls (最新网摘列表),同时取消了 daily blog posting(每日网摘自动提交成日记)。因为我在顶部菜单的“标签云”和“美味书签”、首页侧边栏、每页侧边栏的“博狗”工具条都有分享网摘的途径,再提交成日记有点多余,并干扰和削弱一般的日记。

  10. 原来我们用了同样的模板,呵呵。

    我觉得每个页面下的翻页,在你的最底下的“上一页”这个语句的位置可以适当的提上来点,放在最低下有点不人性化

    底部foot部位的那条横线,你用的是

    我觉得应该用css来控制,以后底部增加个东西就会发现它们靠在一起了

Comments are closed.