页面载入中...

制作优秀的 WordPress 主题

Web Designer Wall
本文由北极冰仔翻译自 Nick La 原文 WordPress Theme Hack
转载请务必以超级链接的形式注明本文原文出处。如您对此存有异议,请勿转载。
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html

WordPress 最初的开发目标只是一个博客平台。但是现在 WordPress 已经日渐强大,你可以使用它来建立任何类型的网站或把它当作一套内容管理系统(CMS)。写这篇文章,我将与大家分享一些关于如何制作更优秀的 WordPress 主题的技巧。我不是程序员或是开发人员,所以我将重点放在前台的开发上。呃,对了,我忘记说了,WordPress 让这类开发变得如此简单,即使是非程序员(像我一样的设计师)也能建立出非常棒的网站来。我的 WordPress 站点包括:N.Design StudioBest Web GalleryWeb 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 标签中。

<ul id="nav">
  <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 标签。

<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>

动态内容

如果你想包含一个只在首页上显示的文件,使用下面的代码:

<?php if ( is_home() ) { include ('file.php'); } ?>

高亮特定的日志

假设 ID 为 2 的目录是你的特别目录,你想添加一个 CSS 类使得该目录下的所有日志均高亮显示,那么你可以在 WordPress 的循环中使用下面的代码片段:

<?php if ( in_category('2') ) { echo ('class="feature"'); } ?>

唯一的单篇日志模板

假设你想使用不同的单篇日志模板(single.php)显示不同目录下的文章,你可以使用 in_category 函数来判断某篇日志处于哪个目录,然后调用不同的单篇日志模板。在默认的 single.php 文件中,敲入下面的代码,目录 1 的文章将使用 single1.php 模板,目录 2 的文章将使用 single2.php,其它文章将使用 single_other 模板:

<?php
  $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 if (have_posts()) : ?>

<?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 篇日志:

<?php query_posts('showposts=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:

<?php query_posts('cat=2&showposts=5'); ?>

<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 query_posts('cat=-2'); ?>

<?php while (have_posts()) : the_post(); ?>
  //the loop here
<?php endwhile;?>

小技巧:你还可以使用 posts_per_page 参数指定每页显示的日志数:

<?php query_posts('posts_per_page=6'); ?>

自定义字段

自定义字段 Custom_Fields 是 WordPress 最强大的功能之一,它允许你为日志的内容或摘要附加额外的数据或文本。有了自定义字段,你可以自由地把 WordPress 变成一个 CMS 系统。在 Web Designer Wall,我使用自定义字段为每篇日志显示一张图片并链接至它。
本文地址:http://hellobmw.com/archives/wordpress-theme-hacks.html

首先要为日志添加自定义字段:
custom fields

再使用下面的代码调用图片并添加链接:

<?php //get article_image (custom field) ?>
<?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 的页面,因为它就是站点地图页面本身,我不想把它也显示出来:

<ul>
  <?php wp_list_pages('exclude=12&title_li=' ); ?>
</ul>

动态的子页面菜单

把下面的代码放进 sidebar.php,它将显示当前页面的子页面,如果有的话:

<?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

下面是页面模板的结构:

<?php
/*
Template Name: Portfolio
*/

?>

<?php get_header(); ?>
  //the loop here
<?php get_footer(); ?>

当你编辑一个页面时,可以为它指定可用的模板:
Page Template

WordPress 选项

还有一些 WordPress 内建的选项可以让你的站点看上去更好,它们是:

自定义首页

默认情况下,WordPress 将会在你的首页上显示日志,但是你可以设置为一个静态页面或是欢迎页面,在 Admin -> Options -> Reading 中设置该选项:
FrontPage Option

永久链接

默认地,WordPress 日志的地址是类似于 www.yoursite.com/?p=123 的形式,它既不是 URL 又对搜索引擎不友好,你可以在 Admin -> Options -> Permalinks 中设置 Permalink 永久链接的形式。

目录前缀

WordPress 目录的默认前缀是 category,当你按照下图在 Options -> Permalinks 中输入 article 后,目录的前缀将变为 article。
Category Base
目录的 URL 也将从 yoursite.com/category/cat-name/ 变为 yoursite.com/article/cat-name/

想继续读?

WordPress Codex 是学习 WordPress 的最佳去处,感谢 WordPress!(译者按:感谢 Nick La!)

18条留言. 发言 or Trackback

  • fisio  00:36 Oct 16, 2007 

    打算什么时候整一个鼠标悬停就展开的订阅菜单…

  • ZiNG  20:44 Oct 17, 2007 

    best web gallery is one of my favorate

  • 李晨英语  06:01 Oct 29, 2007 

    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.

  • 北极冰仔  08:58 Oct 29, 2007 

    Steven > Hah, I made a mistake, thanks for your correction! ^_^

  • 李晨英语  18:19 Oct 29, 2007 

    Buddy, you’re welcome:-)

  • 黑色饼干  10:28 Jan 13, 2008 

    转载,怕以后找不到了,呵呵,太好的文章

  • zeekoo  11:04 Feb 13, 2008 

    这篇文章真的很好

  • zlpx  00:12 Mar 08, 2008 

    写的很不错,分析很有力度.

  • 跑调麦霸  17:35 Apr 03, 2008 

    写得很好!
    但是
    “显示特定日志,排除特定日志”
    我这样用了以后加上翻页代码,出现的分页每页内容都一样~
    很是郁闷,请问可以帮助解决么? :)

  • 大猫  21:11 Apr 09, 2008 

    刚好用到~感谢感谢~

  • tsinlan  10:31 Jun 02, 2008 

    嗯 这篇文章来打造CMS非常实用。。

  • Daniel  15:51 Jun 13, 2008 

    分享是一种美德啊 ,,, 3Q 博主 呵呵 见到一个不错的 给你也推荐一下 有23 个 呵呵 在下面啦
    http://www.allove.org/index.php/archives/wordpress-themes.html

  • futongban  14:29 Aug 06, 2008 

    想做一个基于目录的导航,看了这里,主要是学习query_post,很快可以做出来,谢谢了

  • 混子  08:47 Aug 15, 2008 

    真是不错的教程

  • maypu  19:28 Oct 26, 2008 

    很实用的内容

  • 一切皆有可能  18:39 Dec 15, 2008 

    不错,很好,很实用。

  • 温州seo  11:26 Dec 19, 2008 

    强人就是强人,很实用啊

  • 导航网  22:13 Dec 19, 2008 

    博主的博客很不错啊.我也想做一个

留言 ↓

欢迎回来, (修改)

  • :em03:
  • :em05:
  • :em23:
  • :em07:
  • :em06:
  • :em18:
  • :em22:
  • :em25:
  • :em10:
  • :em17:
  • :em26:
  • :em27:
  • :em19:
  • :em21:
  • :em01:
  • :em16:
  • :em12:
  • :em09:
  • :em02:
  • :em24:
  • :em11:
  • :em20:
  • :em15:
  • :em00:
  • :em08:
  • :em13:
  • :em04:
  • :em14:

正在提交数据...

9Pingbacks & Trackbacks