October 15, 2007
制作优秀的 WordPress 主题

本文由北极冰仔翻译自 Nick La 原文 WordPress Theme Hack。
转载请务必以超级链接的形式注明本文及原文出处。如您对此存有异议,请勿转载。
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
WordPress 最初的开发目标只是一个博客平台。但是现在 WordPress 已经日渐强大,你可以使用它来建立任何类型的网站或把它当作一套内容管理系统(CMS)。写这篇文章,我将与大家分享一些关于如何制作更优秀的 WordPress 主题的技巧。我不是程序员或是开发人员,所以我将重点放在前台的开发上。呃,对了,我忘记说了,WordPress 让这类开发变得如此简单,即使是非程序员(像我一样的设计师)也能建立出非常棒的网站来。我的 WordPress 站点包括:N.Design Studio、Best Web Gallery、Web Designer Wall 和一些免费的 WordPress 主题。
WordPress Conditional Tags / WordPress 条件标签
在创建一款动态的 WordPress 主题过程中,条件标签非常有用。它允许你控制哪些内容将会显示、以怎么样的方式显示。下面是一些条件标签的示例:
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
动态高亮菜单
我在 Best Web Gallery 中使用了动态高亮菜单。假如当前页面是首页(Home)或目录页(Category)或存档页(Archive)或搜索结果页(Search)或单篇日志页面(Single),class="current" 属性将会自动加入到第一个列表条目的 li 标签中,它将会高亮显示“Callery”按钮;假如当前页面的缩略名是“about”时,class="current" 属性将自动加入第二个列表条目的 li 标签中。
<li<?php if ( is_home() || is_category() || is_archive() || is_search() || is_single() || is_date() ) { echo ' class="current"'; } ?>><a href="#">Gallery</a></li>
<li<?php if ( is_page('about') ) { echo ' class="current"'; } ?>><a href="#">About</a></li>
<li<?php if ( is_page('submit') ) { echo ' class="current"'; } ?>><a href="#">Submit</a></li>
</ul>
动态 title 标签
又一个例子,我将使用条件标签在 header.php 中输出动态的 title 标签。
<?php
if (is_home()) {
echo bloginfo('name');
} elseif (is_404()) {
echo '404 Not Found';
} elseif (is_category()) {
echo 'Category:'; wp_title('');
} elseif (is_search()) {
echo 'Search Results';
} elseif ( is_day() || is_month() || is_year() ) {
echo 'Archives:'; wp_title('');
} else {
echo wp_title('');
}
?>
</title>
动态内容
如果你想包含一个只在首页上显示的文件,使用下面的代码:
高亮特定的日志
假设 ID 为 2 的目录是你的特别目录,你想添加一个 CSS 类使得该目录下的所有日志均高亮显示,那么你可以在 WordPress 的循环中使用下面的代码片段:
唯一的单篇日志模板
假设你想使用不同的单篇日志模板(single.php)显示不同目录下的文章,你可以使用 in_category 函数来判断某篇日志处于哪个目录,然后调用不同的单篇日志模板。在默认的 single.php 文件中,敲入下面的代码,目录 1 的文章将使用 single1.php 模板,目录 2 的文章将使用 single2.php,其它文章将使用 single_other 模板:
$post = $wp_query->post;
if ( in_category('1') ) {
include(TEMPLATEPATH . '/single1.php');
} elseif ( in_category('2') ) {
include(TEMPLATEPATH . '/single2.php');
} else {
include(TEMPLATEPATH . '/single_other.php');
}
?>
唯一的目录模板
假设你想为不同的目录使用不同的模板,你只需要简单地将模板保存为以 category-2.php 这种形式命名的文件,category-2.php 用来显示 ID 为 2 的目录,category-3.php 用来显示 ID 为 3 的目录,依次类推。
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
在第一篇日志后显示 Google 广告
很多人向我询问如何实现在第一篇日志后显示 Google 广告,很简单,你需要在循环中使用一个变量 $loopcounter,当 $loopcounter 小于等于 1 时,添加 Google 广告代码文件:
<?php while (have_posts()) : the_post(); $loopcounter++; ?>
// the loop stuffs
<?php if ($loopcounter <= 1) { include (TEMPLATEPATH . '/ad.php'); } ?>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>
调用日志
你可以在循环中使用 query_posts 来控制日志的调用,它允许你控制日志显示的内容、显示的位置、显示的方式。你可以调用或排除特定的目录,你有完全的权力来决定。下面我将演示如何使用 query_posts 显示最新日志列表、特定日志或排除特定的目录:
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
显示最新日志列表
下面的代码将显示最新的 5 篇日志:
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>
显示特定日志
假设 ID 为 2 的目录是你的特别目录,你想在侧边栏中显示该目录下的 5 篇最新日志,那么把下面的代码写进 sidebar.php:
<ul>
<?php while (have_posts()) : the_post(); ?>
<li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile;?>
</ul>
排除特定的目录
你可以使用 query_posts 来排除显示特定目录的日志,下面的代码将排除 ID 为 2 的目录,请注意 ID 前面的负号:
<?php while (have_posts()) : the_post(); ?>
//the loop here
<?php endwhile;?>
小技巧:你还可以使用 posts_per_page 参数指定每页显示的日志数:
自定义字段
自定义字段 Custom_Fields 是 WordPress 最强大的功能之一,它允许你为日志的内容或摘要附加额外的数据或文本。有了自定义字段,你可以自由地把 WordPress 变成一个 CMS 系统。在 Web Designer Wall,我使用自定义字段为每篇日志显示一张图片并链接至它。
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
首先要为日志添加自定义字段:

再使用下面的代码调用图片并添加链接:
<?php $image = get_post_meta($post->ID, 'article_image', true); ?>
<a href="<?php the_permalink() ?>"><img src="<?php echo $image; ?>" alt="<?php the_title(); ?>" /></a>
小技巧:别忘了 WordPress 允许你为每篇日志添加多个自定义字段。
我在 Best Web Gallery 中使用了多个自定义字段调用站点缩略图,图片提示和链接地址。
WP List Pages
模板标签 wp_list_pages 通常用来显示导航页面列表,下面我告诉你如何使用它来显示站点地图和子菜单。
站点地图
为你的所有页面生成一个站点地图(示例),把下面的代码放进你的页面模板中(page.php),我排除了 ID 为 12 的页面,因为它就是站点地图页面本身,我不想把它也显示出来:
<?php wp_list_pages('exclude=12&title_li=' ); ?>
</ul>
动态的子页面菜单
把下面的代码放进 sidebar.php,它将显示当前页面的子页面,如果有的话:
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
<ul>
<?php echo $children; ?>
</ul>
<?php } ?>
页面模板
如果你想用 WordPress 建立一个网页管理系统,你一定不能放过页面模板这个功能。它允许你自定义页面的显示方式。要使用页面模板,首先你得创建一个页面模板,然后给页面指定这个模板:
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html
下面是页面模板的结构:
/*
Template Name: Portfolio
*/
?>
<?php get_header(); ?>
//the loop here
<?php get_footer(); ?>
当你编辑一个页面时,可以为它指定可用的模板:

WordPress 选项
还有一些 WordPress 内建的选项可以让你的站点看上去更好,它们是:
自定义首页
默认情况下,WordPress 将会在你的首页上显示日志,但是你可以设置为一个静态页面或是欢迎页面,在 Admin -> Options -> Reading 中设置该选项:

永久链接
默认地,WordPress 日志的地址是类似于 www.yoursite.com/?p=123 的形式,它既不是 URL 又对搜索引擎不友好,你可以在 Admin -> Options -> Permalinks 中设置 Permalink 永久链接的形式。
目录前缀
WordPress 目录的默认前缀是 category,当你按照下图在 Options -> Permalinks 中输入 article 后,目录的前缀将变为 article。

目录的 URL 也将从 yoursite.com/category/cat-name/ 变为 yoursite.com/article/cat-name/
想继续读?
WordPress Codex 是学习 WordPress 的最佳去处,感谢 WordPress!(译者按:感谢 Nick La!)

打算什么时候整一个鼠标悬停就展开的订阅菜单…
best web gallery is one of my favorate
Hello buddy, I can see you’ve put tremendous effort into such a neat yet informative translation. Great job! A word of caution, though, that under no circumstances should one use the “《》” to ‘wrap up’ an English title; i.e. the “《》” in “本文由北极冰仔翻译自 Nick La 原文《WordPress Theme Hack》。” must be discarded.
Steven > Hah, I made a mistake, thanks for your correction! ^_^
Buddy, you’re welcome:-)
转载,怕以后找不到了,呵呵,太好的文章
这篇文章真的很好
写的很不错,分析很有力度.
写得很好!
但是
“显示特定日志,排除特定日志”
我这样用了以后加上翻页代码,出现的分页每页内容都一样~
很是郁闷,请问可以帮助解决么?
刚好用到~感谢感谢~
嗯 这篇文章来打造CMS非常实用。。
分享是一种美德啊 ,,, 3Q 博主 呵呵 见到一个不错的 给你也推荐一下 有23 个 呵呵 在下面啦
http://www.allove.org/index.php/archives/wordpress-themes.html
想做一个基于目录的导航,看了这里,主要是学习query_post,很快可以做出来,谢谢了
真是不错的教程
很实用的内容
不错,很好,很实用。
强人就是强人,很实用啊
博主的博客很不错啊.我也想做一个