WordPress模板制作常用函数和代码

转自:挑战书

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

  1. WordPress基本模板文件
    1. 主要文件
    2. 各模板文件的作用
    3. 模板文件常用调用命令
  2. bloginfo()
    1. 函数声明
    2. 例子
    3. 其它参数
  3. 让大多数插件得以工作
  4. 增强控制能力
  5. 内容输出
    1. 文章输出
    2. 其它内容输出
    3. 日志分页
  6. wp_list_comments()
    1. 用法
    2. 默认值
    3. 参数意义
  7. wp_list_categories()
    1. 典型用法
    2. 默认值
    3. 参数意义
  8. wp_get_archives()
    1. 典型用法
    2. 参数意义
  9. wp_tag_cloud()
    1. 描述
    2. 用法
    3. 例子
    4. 在“热门标签”下显示云图
    5. 云图减少显示的个数和用使用次数代替名称排序
    6. 参数
    7. 创建标签档案文件
    8. 第三步的详细说明
  10. wp_list_bookmarks()
    1. 相关参数:
    2. 例子

基本模板文件

主要文件

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

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

各模板文件的作用

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

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

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

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

模板文件常用调用命令

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

bloginfo()

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

函数声明

<? bloginfo('show'); ?>

例子

输出博客名:

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

输出所用字符集:

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

输出博客描述:

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

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

<? bloginfo('stylesheet_url'); ?>

输出模板目录:

<? bloginfo('template_url'); ?>

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

<script type="text/javascript" src="<? 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 blog 博客描述
home = http://example/home 主页
html_type = text/html
language = en-US 语言
name = Testpilot
pingback_url = http://example/home/wp/xmlrpc.
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 :版本
wpurl = http://example/home/wp

让大多数插件得以工作

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

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

增强控制能力

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

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

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

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

内容输出

文章输出

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

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

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

其它内容输出

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

日志分页

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

wp_list_comments()

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

用法

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

默认值

<? $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"><? wp_list_comments(array('style' => 'div')); ?></div>
<ol class="commentlist"><? 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()

输出分类目录链接。

典型用法

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

默认值

<? $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:输出格式:

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

format=option:输出格式:

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

before:archives前

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

after:archives后

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

show_post_count:是否显示文章数量

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

wp_tag_cloud()

描述

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

用法

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

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

  1. <? 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.模版不存在时,将使用archives.模版。通 过使用tag.模版,你可以定制你的标签存档的样式,此模版在最上面包含了标签云图,起到了导航的作用。

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

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

第三步的详细说明

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

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

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

wp_list_bookmarks()

2.1 版本启用了一个新函数来代替以前常用的 Blogroll 的两个函数 get_links_list()get_links() ,这2个函数可能会在以后的版本中被弃用,所以以后在调用 Blogroll 的时候最好用:
<? 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 (怎么翻译?!) (FALSE)。默认允许。
  2. 1 (允许 – 默认)
  3. 0 (不允许)

例子

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

你可能也会对这些文章感兴趣:

收藏&分享:
收藏与分享

暂无回复 “WordPress模板制作常用函数和代码”

请你留言:

你必须 登录 才可以回复.