Posts Tagged ‘源代码’

Wordpress怎样在标签云中添加文章数量(非插件)

Monday, February 16th, 2009

今天我在自己的摄影博客里添加了一个标签页面,因为随着使用的标签越来越多,有必要将标签整理成一个单独的页面。

这本身是非常简单的,众所周知,只要使用wp_tag_cloud()函数就可以轻松完成,但我突然想让标签云能在每一个标签旁边显示所使用的文章数量。通过在网络上的一番搜寻,竞然没有找到直接的解决办法,除非使用插件。

后来在一篇介绍标签流行度的文章里找到了答案,现将之记录下来,供自己和其它需要的朋友参考。

其实也不难,只是需要修改一句代码。

1. 找到category-template.php这个文件,它位于wp-includes这个目录里。

2. 找到这几句代码:
$a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" . attribute_escape(
$topic_count_text_callback( $count ) ) . "'$rel style='font-size: "
.
( $smallest + ( ( $count - $min_count ) * $font_step ) )
. "$unit;'>$tag_name</a>";

上面的这几句代码在Wordpress2.7版本中处于694-696行,但随着不同的版本会有所不同,但没关系,你可以直接查找$a[]来迅速找到这几句代码。

3. 将上述代码的最后一行修改成:
. "$unit;'>$tag_name<span>($count)</span></a>";

OK!大功告成了。
以后,当你使用wp_tag_cloud()函数时,就会在标签云中的每一个标签旁边自动显示标签被使用的文章数量。

寻找wordpress日志代码显示插件

Wednesday, January 14th, 2009

博客在升级到wordpress 2.7以前一直在使用Coolcode代码高亮显示插件,对于这个插件我个人感觉还是挺不错的,是少见的国人制作的精品插件。

但当我将博客升级到WP2.7以后,发现此插件在后台已经无法激活,我不知道是否自己的WP2.7程序文件有损坏,反正这又一次让我回到了寻找wordpress日志代码显示插件的轮回中去。

不管对什么,每个人的要求都不一样。而我对代码显示插件的要求很简单,快速,简洁,尽可能地兼容各种环境,是我最关心的,至于什么高亮效果,行号,各种五彩的样式等对我来说并不是主要的。

寻找插件当然是去Wordpress的插件主页面,你可以在这里找到很多类似的代码显示插件。

在众多代码显示插件中我想推荐一下WP-Syntax,这是一个很经典的代码显示插件,使用方法很简单,上传插件并激活后,在日志中只要使用如下语句就可以插入代码了。


<pre lang="LANGUAGE" line="1">
在这里插入代码
</pre>

其中的‘LANGUAGE’用代码语言代替。line=”1″代表包含行号。line=”0″或者默认表示不包含行号。
例如,我可以这样写:
(more…)

使用MacpieRSS在你的站点上添加RSS feed

Sunday, February 10th, 2008

今天在网上看到这样一个资料。很感兴趣。准备先记下来慢慢研究。

============================================

聚合其他站点的内容是在你的站点上获得最新内容的好办法。当用户访问你的站点的时候他们能高看到聚合的内容以及发布者的链接。如果他们对其中的某项内容感兴趣他们能够通过链接访问原始地址。你可以使用RSS协议和MagpieRSS格式的一点PHP代码在你的站点上添加聚合内容。方法如下:

MagpieRSS是一个PHP编写的RSS解析器。它支持RSS0.9和1.0,以及部分RSS2.0.MagpieRSS是一个简单的面向对象的末端,它包含了自动的解析RSS缓存来降低外部Web站点的负载。为了在你的Web站点上使用MagpieRSS,你需要带XML支持的PHP4.2.0,或者libxml2支持的PHP5。
下载MagpieRSS。解压得到四个主要文件(rss_fetch.inc, rss_parser.inc, rss_cache.inc, 和 rss_utils.inc)以及extlib目录,把他们拷贝到你的Web服务器上根目录中的magpierss目录下。
接下来,决定你要在你的站点上聚合的内容。如果你希望这些内容在你的起始页面显示,你需要修改index.php文件。如果你只有index.html文件,那么把它重命名为index.php然后加入一下PHP代码。
编辑这个文件,在顶部加入下面的内容:

<?php
require_once('magpierss/rss_fetch.inc');
?>

为了获得并解析RSS,需要在你的页面里调用fetch_rss()方法。

<?php
$rss = fetch_rss("http://www.newsforge.com/index.rss");
?>

把newsforge.com换成你想要聚合的URL。
这个函数返回一个数组($rss),这个数组包含聚合条目和发布者信息的数组,例如发布者的名字(保存在$rss->channel[’title’])和可选的发布者描述(例如,”The Online Newspaper for Linux and Open Source”)可以在$rss->channel[’description’]中得到。$rss->channel[’link’]中包含发布者的初始地址。
聚合的条目可以通过访问$rss->items得到。可以通过简单的循环一次列出所有条目:
foreach ($rss->items as $item)
{ // Your code here
}
每个条目包含一个标题,链接地址和描述。$item[’title’]包含文章或故事的标题,$item[’link’]是初始的地址,$item[’description’]是故事的描述--通常是介绍段落或者摘要。
用下面的代码可以显示聚合条目的简单列表:

<?php
require_once('magpierss/rss_fetch.inc');
$rss = fetch_rss('http://www.newsforge.com/index.rss');
 
echo "<a href=".$rss->channel['link']."><B>".$rss->channel[ 'title']."</B></a>";
foreach ($rss->items as $item) {
$href = $item['link'];
$title = $item['title'];
$desc = $item['description'];
echo "<P><a href=$href>$title</a><BR>";
if($desc)
echo $desc;
}
?>

当然,输出是简单的HTML,但是你应该可以从这里扩展代码来适应你的站点的样式和设计。

长度

在RSS的0.91版本中指定的标题长度限制在100个字符,描述为500个字符。然而在RSS0.92或者更新的版本中没有限制。这可能会给你的Web站点带来一个问题。重要的是保持你的站点的视觉和感觉。如果聚合条目显示的太自由,你的站点可能开始看着很散乱。想象一下在侧边栏中用上面类似的代码显示新闻条目。如果一个特殊条目的描述有几千个字符那么长,会发生什么呢?或者如果有50个条目要聚合会怎么样?
长度检验是把聚合条目放到你的站点上的一个重要方面。为了限制条目显示的数目,最简单的办法就是把结果数组分割成更小的块而。调用fetch_rss()之后,在其他任何处理之前,添加如下代码:
$items = array_slice($rss->items, 0, 10);
它会把数组缩减到只有前10条。现在可以放心的使用foreach循环。
检查描述的长度使用strlen()函数:
if (strlen($desc) >= 80)
{
$desc = substr($desc,0,79).”…”;
}
这里描述被缩减到少于80个字符,在末尾使用……表示还有更多的内容。如果你已经缩减了描述你可能会把链接指定到整个聚合文本而不是指定到初始地址。那将使用户停留在你的站点的时间更长。然后全部聚合条目再包含初始地址的链接。为了实现这个,你需要一个程序,例如叫做readmore.php,它使用MagpieRSS来在网页上显示全部文本作为主要条目同时包括你的正常导航,侧边栏以及广告。readmore.php的参数是RSS feed的URL和你希望显示的项目数。要注意的是有些描述包含HTML作为普通文本。轻易的截断字符串会导致字符串被截掉半个标签。需要的是智能的截断但是那超出了本文讨论的范围。粗糙的解决方案是使用PHP的函数strip_tags()他将从字符串中删掉HTML标记。用readmore.php显示的条目的完整内容可以保留完整的标记。

缓存

为了提高你的Web站点的速度和给发布者的web服务器节省资源,建立缓存是非常重要的。MacpieRSS已经内建了自动的缓存。通过缓存,MacpieRSS只去获取和解析缓存过期的RSS feeds。
把下面的代码加入到你的程序里,以使缓存生效:
define(’MAGPIE_CACHE_DIR’, ‘/tmp/mysite_magpie_cache’);
define(’MAGPIE_CACHE_ON’, 1);

MacpieRSS默认一小时缓存一次,可以通过下面的代码来修改:
define(’MAGPIE_CACHE_AGE’, 1800);
这里的1800是缓存对象的秒数(例如,30分钟,60*30)。
结论
MacpieRSS使在你的Web站点上添加聚合内容变得容易,只要很少的时间你就可以让你的站点变得更好,记住“内容至上”。

修改Wordpress的Page页面导航栏

Wednesday, February 6th, 2008

在用Wordpress的时候,有时候我们会需要做一个简单的CMS系统。什么是CMS?嗯,可能这样说话题有点太大,OK!不说CMS了,想知道可以自己搜索一下Google。

换个简单的说法,有时候我们在使用Wordpress时会需要在page页面导航中增加一个Home菜单。而默认模板下Wordpress是没有Home菜单的。其实要了解怎么加Home菜单很容易,只要下载一个带Home菜单的主题就行了,查看其中的head.php文件,可以看到是通过添加一段代码实现的。完整代码如下:

<li class="<?php if (is_home()) { echo "current_page_item";
} ?>"><a href="<?php echo get_settings('home'); ?>">Home</a></li>
<?php wp_list_pages('title_li=&depth=1&exclude='); ?>

可以看到,这样就把Home菜单加在了页面导航的最前面。

还有另外一种情况。有时候我们需要使用某一个Page(页面)来做主页,而把默认的博客显示页面作为一个页面。这项功能本身的实现很容易,因为Wordpress很早就支持此项功能了。只要在菜单“选顶”–“阅读”内设置“Front Page”就行了,这个就不多说了。但带来的问题是,如此一来,会使页面导航栏中的博客页面无法显示选中状态。比如,当点击“博客”页面时,应该“博客”两个字是红色的,其它页面导航文字仍然是黑色,但修改“Front Page”后,这个“博客”页面的选中状态就失效了。

解决方法也是比较简单的,但有时候你不知道,就会多走一些弯路。 :)
解决此问题完整代码如下:

<?php wp_list_pages('title_li=&depth=1&exclude=85'); ?>
<li class="<?php if (is_home()) { echo "current_page_item";
} ?>"><a href="YOUR-URL">博客</a></li>

其中第1行最后的85是“博客”页面的page_id号(这个ID号用你自己“博客”页面的ID号代替)。之所以要排除这个page,是因为我们已经在第2行代码中手工添加了这个页面的导航。第2行中的YOUR-URL用你的“博客”页面地址代替就行了。

简单吧!想想也实在很简单。记录一下,这样才不会忘掉。 :idea:

Follow Me On Twitter