在这里整理一些制作WordPress模板过程中常用的函数和代码。函数和代码不按重要程度排序,按模板制作的大体过程排序。

WordPress基本模板文件

主要文件

一般情况下一套完整的WordPress模板都包含以下几个文件:

  • style.css : CSS(样式表)文件
  • index.php : 主页模板
  • archive.php : Archive/Category/Tag模板
  • 404.php : Not Found 错误页模板
  • comments.php : 留言/回复模板
  • footer.php : Footer模板
  • header.php : Header模板
  • sidebar.php : 侧栏模板
  • page.php : 内容页(Page)模板
  • single.php : 内容页(Post)模板
  • search.php : 搜索结果模板

各模板文件的作用

制作WordPress模板至少需要style.css和index.php两个文件。index.php是一个相当灵活的文件,它可以用来生成header, sidebar, footer, content, categories, archives, search, error和其它页面。我们可以使用更模块化的方式制作模板。我们制作这些文件:

  • header.php
  • sidebar.php
  • footer.php
  • comments.php

用它们制作页面头、页面尾或者边栏,然后在index.php等文件中调用它们。

虽然可以用index.php生成所有WordPress页面,WordPress还提供了single.php来生成单篇日志,page.php来生成页面,archive.php来生成存档页。另外,还有以下文件也用来生成特定页面:

  • author.php :作者页面
  • category.php:分类页面
  • date.php:日期
  • search.php:搜索结果
  • home.php:主页

模板文件常用调用命令

  • <?php get_header(); ?> : 调用Header模板
  • <?php get_sidebar(); ?> : 调用Sidebar模板
  • <?php get_footer(); ?> : 调用Footer模板
  • <?php comments_template(); ?> : 调用留言/回复模板
  • <?php include(TEMPLATEPATH . ‘/文件名’); ?> : 嵌入其他文件,可为定制的模板或其他类型文件与模板相关的其他函数

bloginfo()

显示博客相关信息,其数据大部分从管理员面板的个人配置和设置中得来。该函数可以在模板的任何地方使用,一般用来生成head部分。它总是直接向浏览器输出结果,如果你需要在PHP中使用这类值就要使用get_bloginfo()函数。

函数声明

<?php bloginfo('show'); ?>

例子

输出博客名:

<h1><?php bloginfo('name'); ?></h1>

输出所用字符集:

<p>Character set: <?php bloginfo('charset'); ?> </p>

输出博客描述:

<p><?php bloginfo('description'); ?> </p>

输出默认的CSS样式表地址:

<?php bloginfo('stylesheet_url'); ?>

输出模板目录:

<?php bloginfo('template_url'); ?>

利用这个函数可以在模板中使用自定义的JavaScript文件、图片文件或者其它CSS文件,例如:

<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/jan.js" />

其它参数

该函数还可使用以下参数,根据参数不同输出不同结果,等号后面为一般参考值:
admin_email = admin@example 管理员邮箱
atom_url = http://example/home/feed/atom
charset = UTF-8 字符类型
comments_atom_url = http://example/home/comments/feed/atom
comments_rss2_url = http://example/home/comments/feed
description = Just another WordPress blog 博客描述
home = http://example/home 主页
html_type = text/html
language = en-US 语言
name = Testpilot
pingback_url = http://example/home/wp/xmlrpc.php
rdf_url = http://example/home/feed/rdf
rss2_url = http://example/home/feed
rss_url = http://example/home/feed/rss
siteurl = http://example/home
stylesheet_directory = http://example/home/wp/wp-content/themes/largo
stylesheet_url = http://example/home/wp/wp-content/themes/largo/style.css
template_directory = http://example/home/wp/wp-content/themes/largo
template_url = http://example/home/wp/wp-content/themes/largo
text_direction = ltr
url = http://example/home
version = 2.7 :WordPress版本
wpurl = http://example/home/wp

让大多数插件得以工作

如果希望模板支持大多数插件的话就需要用到这两个函数:wp_head()、wp_footer()。一般的模板都包含header.php和footer.php这两个文件,用来生成HTML文档头和文档尾,用这种结构化的思想可以让模板制作变的更有条理和更便于维护。在HTML头部,head标签结束之前应该使用<?php wp_header(); ?>语句;在HTML尾,body标签结束之前应该使用<?php wp_footer(); ?>PHP语句。

这两个函数和模板外观关系不大,但是却是很多插件利用的工具,这些插件借用这两个函数在HTML中插入相关语句。

增强控制能力

需要不多的英文能力就可以知道这些函数的含义,它们分别是is_home()、is_single()、is_archive()、is_tag()、is_category()、is_page()。

这些函数分别用来判断当前页是否是主页、日志页或者存档页等。如果判断为是则返回TRUE,否则返回FALSE。这些函数一般做为IF语句中的条件表达式,这对于在不同的页面显示不同的页面效果是很有用的函数。

这些函数中除is_home()外,其它函数还可以带”ID”参数,用于更精确的判断到底是哪一个页面或分类。如:<?php if( is_page(20268) ) { } ?>,用于判断页面的ID是否为20268。

另外,tag和category也被当做archive,也会返回TRUE,所以区分tag和archive就要注意”IF-ELSE”的顺序。

内容输出

文章输出

WordPress给出了比较方便好用的文章流出方式,先看默认模板中文章流出的方式:
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div <?php post_class() ?> id="post-<?php the_ID(); ?>">
<h2><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></h2>
<small><?php the_time('F jS, Y') ?> <!-- by <?php the_author() ?> --></small>
<div class="entry">
<?php the_content('Read the rest of this entry &raquo;'); ?>
</div>
<p class="postmetadata"><?php the_tags('Tags: ', ', ', '<br />'); ?> Posted in <?php the_category(', ') ?> | <?php edit_post_link('Edit', '', ' | '); ?> <?php comments_popup_link('No Comments &#187;', '1 Comment &#187;', '% Comments &#187;'); ?></p>
</div>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link('&laquo; Older Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Newer Entries &raquo;') ?></div>
</div>
<?php else : ?>
<h2 class="center">Not Found</h2>
<p class="center">Sorry, but you are looking for something that isn't here.</p>
<?php get_search_form(); ?>
<?php endif; ?>

对以上代码做个精减:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_ID(); ?>
<?php the_title_attribute(); ?>
<?php the_title(); ?>
<?php the_content(); ?>
<?php the_tags(); ?>
<?php the_category() ?>
<?php the_time() ?>
<?php the_author() ?>
<?php trackback_url(); ?>
<?php endwhile; ?>
<?php endif; ?>

这就是一个文章输出过程中用到的函数,包括文章名、内容、分类、标签等信息。

其它内容输出

<?php the_title(); ?> : 内容页(Post/Page)标题
<?php the_permalink() ?> : 内容页(Post/Page) Url
<?php the_category(’, ‘) ?> : 特定内容页(Post/Page)所属Category
<?php the_author(); ?> : 作者
<?php the_ID(); ?> : 特定内容页(Post/Page) ID
<?php edit_post_link(); ?> : 如果用户已登录并具有权限,显示编辑链接<?php get_links_list(); ?> : 显示Blogroll中的链接<?php comments_template(); ?> : 调用留言/回复模板<?php next_post_link(’ %link ‘); ?> : 下一篇文章链接
<?php previous_post_link(’%link’); ?> : 上一篇文章链接
<?php get_calendar(); ?> : 日历

日志分页

<?php next_posts_link('&laquo; Older Entries') ?><?php previous_posts_link('Newer Entries &raquo;') ?>
就是“前一页”和“后一页”。在单篇日志中,如果文章内容过多,采用了分页的话,就会输出分布连接。还不知道日志怎么分页?在写文章的时候使用<!–next page–>将当前内容分页,记住要在HTML编辑方式下写。

wp_list_comments()

显示一篇文章或页面的所有评论。由多个参数控制,包括其中一个参数由控制面板中的设置给出。

用法

<?php wp_list_comments('参数'); ?>

默认值

<?php $defaults = array(
'walker' => null,
'max_depth' => ,
'style' => 'ul',
'callback' => null,
'end-callback' => null,
'type' => 'all',
'page' => ,
'per_page' => ,
'avatar_size' => 32,
'reverse_top_level' => null,
'reverse_children' => ); ?>

参数意义

avatar_size
(int) 头像大小,默认值32。Gravatar支持的值从1到512。
style
(string) 字符串可以是’div’、’ol’或者 ‘ul’,以此来确定评论是在DIV、OL还是UL标签中。默认值是’ul’。 例如:

<div class="commentlist"><?php wp_list_comments(array('style' => 'div')); ?></div>
<ol class="commentlist"><?php wp_list_comments(array('style' => 'ol')); ?></ol>
type
(string)输出的评论类型。其值可以是 ‘all’, ‘comment’, ‘trackback’, ‘pingback’, 或者 ‘pings’。’pings’是’trackback’和’pingback’一起。默认输出全部。
reply_text
(string) 在回复链接中显示的文字。默认值是Reply。这本不是这个函数的参数,但是它传递给了这个函数将要调用的函数get_comment_reply_link
login_text
(string)在告知用户必需登陆以评论时显示的链接文字。 该参数传递给了get_comment_reply_link。默认值是’Log in to Reply’。
callback
(string) 用户自定义的用于显示评论的函数。默认值是空。

wp_list_categories()

输出分类目录链接。

典型用法

<?php wp_list_categories(’orderby=name&title_li=’); ?>

默认值

<?php $defaults = array(
'show_option_all' => ,
'orderby' => 'name',
'order' => 'ASC',
'show_last_update' => 0,
'style' => 'list',
'show_count' => 0,
'hide_empty' => 1,
'use_desc_for_title' => 1,
'child_of' => 0,
'feed' => ,
'feed_type' => ,
'feed_image' => ,
'exclude' => ,
'exclude_tree' => ,
'include' => ,
'current_category' => 0,
'hierarchical' => true,
'title_li' => __( 'Categories' ),
'number' => NULL,
'echo' => 1,
'depth' => 0 ); ?>

参数意义

hierarchical
(boolean) 控制子分类是显示在父分类下方还是和父分类同样显示。默认值为TRUE,在父分类下方显示。
title_li
(string) 设置列表的标题,默认值是 “_Categories”。如果给出该参数,但是给空值将不会显示标题。
number
(integer) 设置要显示的目录数,默认值是不限制的。
echo
(boolean) 控制结果是送HTML显示还是做为一个变量返回给其它参数使用。默认显示。

  • 1 (true) – 默认
  • 0 (false)
depth
(integer) 目录深度。

  • 0 – 所有目录和子目录。默认。
  • -1 – 所有目录和子目录平等显示(覆盖hierarchical)。
  • 1 – 只显示顶层目录Show only top level Categories
  • n – 显示的目录层数

wp_get_archives()

函数wp_get_archives是用来调用存档的。

典型用法

wp_get_archives
(type=monthly&limit=12&format=
html&before=…&after=…
&show_post_count=true
);

参数意义

type:归档方式

type=monthly:按月显示
type=daily:按天显示
type=weekly:按周显示
type=postbypost:显示文章标题

limit:显示篇数

limit=10:显示最近10篇文章

format:格式

format=html:默认方式
format=link:输出格式:

<?php
<
link rel=archives title=$title_text href=$url />

format=option:输出格式:

<?php
<
option value=$url>$before $text $after</option>

before:archives前

before=…:要在前面加的文字

after:archives后

after=…:要在后面加的文字

show_post_count:是否显示文章数量

show_post_count=true:要在后面显示文章的数量

wp_tag_cloud()

描述

wordpress 2.3版或以上可用。wp_tag_cloud这个模板标签将显示一列标签,即所谓的标签云图,标签使用的次数决定了它的尺寸。

用法

  1. <?php wp_tag_cloud(); ?>

例子

默认值

  1. $defaults = array(smallest => 8, largest => 22,
  2. unit => pt, number => 45, format => flat,
  3. orderby => name, order => ASC,exclude => , include => );

默认显示:

  • smallest – 使用最少的标签的字号为8
  • largest – 使用最多的标签的字号为22
  • unit – 使用’pt’(点)作为最小和最大字号的单位
  • number – 显示最多45个标签
  • format – 使用平面风格显示标签(标签之间用空格分隔)
  • orderby – 以名称排序
  • order – 升序显示
  • exclude – 不排除任何标签
  • include – 包含任何标签

在“热门标签”下显示云图

  1. <?php if ( function_exists(wp_tag_cloud) ) : ?>
  2. <li>
  3. <h2>Popular Tags</h2>
  4. <ul>
  5. <?php wp_tag_cloud(smallest=8&largest=22); ?>
  6. </ul>
  7. </li>
  8. <?php endif; ?>

云图减少显示的个数和用使用次数代替名称排序

  1. <?php wp_tag_cloud(smallest=8&largest=22&number=30&orderby=count); ?>

参数

smallest
(整数) 使用最少的标签的字号 (单位由unit参数给出).
largest
(整数) 使用最多的标签的字号 (单位由unit参数给出).
unit
(字符) 标签字号的单位。 他可以是任何CSS长度单位, 例如: pt, px, em, %; 默认为pt (点).
number
(整数) 云图显示标签的个数。 (使用“0”将显示所有标签。)
format
(字符) 云图显示的格式。

  • ‘flat’ (默认)标签用空格分隔
  • ‘list’ 标签置于一个类名为wp-tag-cloud的无序列表中
  • ‘array’ 标签保存在数值中

orderby
(字符) 标签的排序,有效值为:

  • ‘name’ (默认,名称)
  • ‘count’ 使用次数

order
(字符) 排序次序。有效值 – 必须大写:

  • ‘ASC’ (默认值,升序)
  • ‘DESC’ (降序)

exclude
(字符) 排除用逗号(半角)分隔的一列标签(term_id)。例如, ‘exclude=5,27′ 意味着term_id为5或27的标签将不会显示。默认不排除如何标签。
include
(字符) 包含用逗号(半角)分隔的一列标签。例如,’include=5,27′意味着只有term_id为5或者27的标签将显示。默认包含如何标签。

创建标签档案文件

2.3版本的重要特点是添加了标签功能,wp_tag_cloud标签可以用于显示一个标签存档。这也意味着访问者点击标签云图中的某个标签,他可 以得到所有使用了这个标签的文章。根据Template_Hierarchy,如果tag.php模版不存在时,将使用archives.php模版。通 过使用tag.php模版,你可以定制你的标签存档的样式,此模版在最上面包含了标签云图,起到了导航的作用。

要把这个弄成一个新的模板的话,需要把这个加入到主题文件中去。(Template_Hierarchy里有关于模版的资源。)需要的步骤如下:

  • 1.将下面的内容保存到tag.php中。
  • 2.将该文件上传到主题文件夹中。
  • 3.当你希望在导航栏有个链接可到达标签存档中时,否则它只在点击某个标签后使用:增加一个使用tag.php的空白页面,并给它起名为标签存档。

第三步的详细说明

WordPress可以设置成不同的页面使用不同的页面模板。在管理面板“写作->页面”的底部(或在边栏,取决于你使用的wordpress版本)有个名为“Page Template(页面模板)”的下拉菜单。在那里,你可以选择使用哪个模板显示这个页面。

  1. <?php /*
  2. Template Name: Tag Archive
  3. */ ?>
  4. <div>
  5. <?php get_header(); ?>
  6. <h2>Tag Archive</h2>
  7. <?php wp_tag_cloud(); ?>
  8. <div class=”navigation”>
  9. <div class=”alignleft”><?php next_posts_link(« Older Entries) ?></div>
  10. <div class=”alignright”><?php previous_posts_link(Newer Entries ») ?></div>
  11. </div>
  12. <?php if (have_posts()) : ?>
  13. <?php while (have_posts()) : the_post(); ?>
  14. <h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title(); ?>“><?php the_title(); ?></a></h2>
  15. <div class=”entry”>
  16. <?php the_content(Read the rest of this entry »); ?>
  17. </div>
  18. <?php endwhile; ?>
  19. <?php endif; ?>
  20. </div>
  21. <?php get_footer(); ?>

请注意,这个模板没有添加任何样式,查看single.php可以得知确定的样式。

wp_list_bookmarks()

WordPress 2.1 版本启用了一个新函数来代替以前常用的 Blogroll 的两个函数 get_links_list()get_links() ,这2个函数可能会在以后的版本中被弃用,所以以后在调用 Blogroll 的时候最好用:
<?php wp_list_bookmarks(arguments); ?>
其实这个函数的用法和 wp_list_categories 基本相同,自定义的参数全部都写在了 “(’ ‘)” 里面,并且参数之间用 “&” 连接。

下面是这个函数的默认参数:
$defaults = array(orderby => name, order => ASC, limit => -1, category => ,
category_name => , hide_invisible => 1, show_updated => 0, echo => 1,
categorize => 1, title_li => __(Bookmarks), title_before => <h2>, title_after => </h2>,
category_orderby => name, category_order => ASC, class => linkcat,
category_before => <li id=”%id” class=”%class”>, category_after => </li>);

相关参数:

  1. categorize
    布尔型,用于设置连接是否按照各自的分类显示:
  2. 1 (默认,根据链接的分类显示)
  3. 0 (不按照分类,显示全部)
categorize
字符串型,后面就直接 “=链接的分类ID号” ,那么就显示这个分类下的链接。如果没有指定的话就显示所有的链接。
category_name
字符串型,如果后面 “=某个链接分类的名称” 那么就会在该链接分类前显示分类的名称,如果这里留空的话则会显示所有链接分类的分类名称(即默认的形式)。(个人觉得这个参数不常用,一般不用管它)
category_before
字符串型,位于链接分类之前的文字或代码。默认的设置是:

<li id=[category id] class=linkcat>
category_after
字符串型,位于链接分类之后的文字或代码。默认的设置是:

</li>

其实这上面2个属性就是用来定义每个连接分类的样式,可以理解成下面这种形式:

<li id=[category id] class=linkcat>
单个链接分类下的链接列表
</li>
class
字符串型,每一个链接的分类都会有一个 “class” 属性(从上面的代码就能看出),默认是:linkcat
  1. category_orderby
    字符串型,链接分类的排序方式,按照名词或者ID。
  2. name‘ (默认)
  3. id
  1. category_order
    字符串型,链接分类的升降序排列方式:
  2. ASC (默认)
  3. DESC
title_li
字符串型,链接标题的头文字或代码,默认是:Bookmarks,并且它控制连接是否按照列表的方式排列。
title_beforetitle_after
顾名思义,它们就是连接标题头前后的文字或代码,默认是 h2 标签

上面这2组参数,实际定义的是 Blogroll 上面的头标题,即这个“ Blogroll 分类列表”上的类名。这些大的分类默认是被 li 标签套起来的,然后各个大分类下的链接列表则是套用在 ul 下的 li 进行排列。

  1. show_private
    布尔型,是否显示私有链接。
  2. 1 (是)
  3. 0 (不是 – 默认)
include
字符串型,输出指定 ID 的 Blogroll 的分类链接,各个 ID 之间用半角的 “,” 分开。默认显示所有的 Blogroll 分类。
exclude
字符串型,将指定 ID 的 Blogroll 分类链接从整个链接列表中排除,各个 ID 之间用半角的 “,” 分开。默认是什么都不排除。
orderby
字符串型,
  1. orderby
    字符串型,Blogroll 的排列方式(默认是根据名称排序,除非将这个值留空),即根据我们在 WP 后台链接设置界面下的那些参数来进行排序:
  2. ‘id’
  3. ‘url’
  4. ‘name’
  5. ‘target’
  6. ‘description’
  7. ‘owner’
  8. ‘rating’
  9. ‘updated’
  10. ‘rel’ – 按设定的关系排列
  11. ‘notes’
  12. ‘rss’
  13. ‘length’ – 连接名称的长度设定
  14. ‘rand’ – 随机排列显示
  1. order
    字符串型,设置升降序的排列方式
  2. ASC (默认)
  3. DESC
limit
整型,设置输出链接条数的最大值。默认值是“-1”,输出全部。
beforeafter
字符串型,Blogroll 里每一条连接前面和后面的文字或代码,默认是 li 标签
category_beforecategory_after
字符串型,各个 Blogroll 分类前后的文字或代码,默认也是 li 标签
between
字符串型,每个连接、图片和描述之间的文字或代码,默认是 “\n” 换行。
  1. show_images
    布尔型,是否允许显示 Blogroll 下链接的对应图片。
  2. 1 (允许 – 默认)
  3. 0 (不允许)
  1. show_description
    布尔型,是否允许显示每个链接的描述。
  2. 1 (允许)
  3. 0 (不允许 – 默认)
  1. show_rating
    布尔型,是否允许显示链接的等级。
  2. 1 (允许)
  3. 0 (不允许 – 默认)
  1. show_updated
    布尔型,是否允许显示最近更新后的时间戳。
  2. 1 (允许)
  3. 0 (不允许 – 默认)
  1. hide_invisible
    布尔型,是否显示所有的链接,甚至是被管理员设为不可见的链接,默认允许显示。
  2. 1 (允许 – 默认)
  3. 0 (不允许)
  1. echo
    布尔型,是否允许显示连接 or return them for use by PHP(怎么翻译?!) (FALSE)。默认允许。
  2. 1 (允许 – 默认)
  3. 0 (不允许)

例子

最简单的 Blogroll 列表
显示所有链接,Blogroll 的标题为 h2 标签下的 “Bookmarks”,链接套在 li 标签内
<?php wp_list_bookmarks(title_li=&category_before=&category_after=); ?>
显示根据 URL 排序的,指定分类的链接
显示链接分类为2的 Blogroll ,并给每个连接一个 span 的属性,显示连接图片,不显示描述,根据 url 进行排序。
<?php wp_list_bookmarks(categorize=0&category=2&before=<span>&after=</span>&show_images=1&show_description=0&orderby=url); ?>
显示分级和时间戳
显示所有链接,描述另起一行,不显示图片,根据链接的 ID 排序,并显示链接分级和最近更新的时间戳。
<ol>
<?php wp_list_bookmarks(between=<br />&show_images=0&orderby=id&show_rating=1&show_updated=1); ?>
</ol>

Related posts:

  1. 为wordpress做一个导航菜单
  2. 分享logo做法
  3. 收藏
  4. register_sidebars
  5. dynamic_sidebar