在这里整理一些制作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 »'); ?>
</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 »', '1 Comment »', '% Comments »'); ?></p>
</div>
<?php endwhile; ?>
<div class="navigation">
<div class="alignleft"><?php next_posts_link('« Older Entries') ?></div>
<div class="alignright"><?php previous_posts_link('Newer Entries »') ?></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('« Older Entries') ?><?php previous_posts_link('Newer Entries »') ?>
就是“前一页”和“后一页”。在单篇日志中,如果文章内容过多,采用了分页的话,就会输出分布连接。还不知道日志怎么分页?在写文章的时候使用<!–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是用来调用存档的。
典型用法
(‘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()
描述
wordpress 2.3版或以上可用。wp_tag_cloud这个模板标签将显示一列标签,即所谓的标签云图,标签使用的次数决定了它的尺寸。
用法
- <?php wp_tag_cloud(”); ?>
例子
默认值
- $defaults = array(‘smallest‘ => 8, ‘largest‘ => 22,
- ‘unit‘ => ‘pt‘, ‘number‘ => 45, ‘format‘ => ‘flat‘,
- ‘orderby‘ => ‘name‘, ‘order‘ => ‘ASC‘,‘exclude‘ => , ‘include‘ => );
默认显示:
- smallest – 使用最少的标签的字号为8
- largest – 使用最多的标签的字号为22
- unit – 使用’pt’(点)作为最小和最大字号的单位
- number – 显示最多45个标签
- format – 使用平面风格显示标签(标签之间用空格分隔)
- orderby – 以名称排序
- order – 升序显示
- exclude – 不排除任何标签
- include – 包含任何标签
在“热门标签”下显示云图
- <?php if ( function_exists(‘wp_tag_cloud‘) ) : ?>
- <li>
- <h2>Popular Tags</h2>
- <ul>
- <?php wp_tag_cloud(‘smallest=8&largest=22‘); ?>
- </ul>
- </li>
- <?php endif; ?>
云图减少显示的个数和用使用次数代替名称排序
- <?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(页面模板)”的下拉菜单。在那里,你可以选择使用哪个模板显示这个页面。
- <?php /*
- Template Name: Tag Archive
- */ ?>
- <div>
- <?php get_header(); ?>
- <h2>Tag Archive</h2>
- <?php wp_tag_cloud(”); ?>
- <div class=”navigation”>
- <div class=”alignleft”><?php next_posts_link(‘« Older Entries‘) ?></div>
- <div class=”alignright”><?php previous_posts_link(‘Newer Entries »‘) ?></div>
- </div>
- <?php if (have_posts()) : ?>
- <?php while (have_posts()) : the_post(); ?>
- <h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”Permanent Link to <?php the_title(); ?>“><?php the_title(); ?></a></h2>
- <div class=”entry”>
- <?php the_content(‘Read the rest of this entry »‘); ?>
- </div>
- <?php endwhile; ?>
- <?php endif; ?>
- </div>
- <?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>‘);
相关参数:
- categorize
布尔型,用于设置连接是否按照各自的分类显示: - 1 (默认,根据链接的分类显示)
- 0 (不按照分类,显示全部)
字符串型,后面就直接 “=链接的分类ID号” ,那么就显示这个分类下的链接。如果没有指定的话就显示所有的链接。
字符串型,如果后面 “=某个链接分类的名称” 那么就会在该链接分类前显示分类的名称,如果这里留空的话则会显示所有链接分类的分类名称(即默认的形式)。(个人觉得这个参数不常用,一般不用管它)
字符串型,位于链接分类之前的文字或代码。默认的设置是:
字符串型,位于链接分类之后的文字或代码。默认的设置是:
其实这上面2个属性就是用来定义每个连接分类的样式,可以理解成下面这种形式:
单个链接分类下的链接列表
</li>
字符串型,每一个链接的分类都会有一个 “class” 属性(从上面的代码就能看出),默认是:linkcat
- category_orderby
字符串型,链接分类的排序方式,按照名词或者ID。 - ‘name‘ (默认)
- ‘id‘
- category_order
字符串型,链接分类的升降序排列方式: - ASC (默认)
- DESC
字符串型,链接标题的头文字或代码,默认是:Bookmarks,并且它控制连接是否按照列表的方式排列。
顾名思义,它们就是连接标题头前后的文字或代码,默认是 h2 标签
上面这2组参数,实际定义的是 Blogroll 上面的头标题,即这个“ Blogroll 分类列表”上的类名。这些大的分类默认是被 li 标签套起来的,然后各个大分类下的链接列表则是套用在 ul 下的 li 进行排列。
- show_private
布尔型,是否显示私有链接。 - 1 (是)
- 0 (不是 – 默认)
字符串型,输出指定 ID 的 Blogroll 的分类链接,各个 ID 之间用半角的 “,” 分开。默认显示所有的 Blogroll 分类。
字符串型,将指定 ID 的 Blogroll 分类链接从整个链接列表中排除,各个 ID 之间用半角的 “,” 分开。默认是什么都不排除。
字符串型,
- orderby
字符串型,Blogroll 的排列方式(默认是根据名称排序,除非将这个值留空),即根据我们在 WP 后台链接设置界面下的那些参数来进行排序: - ‘id’
- ‘url’
- ‘name’
- ‘target’
- ‘description’
- ‘owner’
- ‘rating’
- ‘updated’
- ‘rel’ – 按设定的关系排列
- ‘notes’
- ‘rss’
- ‘length’ – 连接名称的长度设定
- ‘rand’ – 随机排列显示
- order
字符串型,设置升降序的排列方式 - ASC (默认)
- DESC
整型,设置输出链接条数的最大值。默认值是“-1”,输出全部。
字符串型,Blogroll 里每一条连接前面和后面的文字或代码,默认是 li 标签。
字符串型,各个 Blogroll 分类前后的文字或代码,默认也是 li 标签。
字符串型,每个连接、图片和描述之间的文字或代码,默认是 “\n” 换行。
- show_images
布尔型,是否允许显示 Blogroll 下链接的对应图片。 - 1 (允许 – 默认)
- 0 (不允许)
- show_description
布尔型,是否允许显示每个链接的描述。 - 1 (允许)
- 0 (不允许 – 默认)
- show_rating
布尔型,是否允许显示链接的等级。 - 1 (允许)
- 0 (不允许 – 默认)
- show_updated
布尔型,是否允许显示最近更新后的时间戳。 - 1 (允许)
- 0 (不允许 – 默认)
- hide_invisible
布尔型,是否显示所有的链接,甚至是被管理员设为不可见的链接,默认允许显示。 - 1 (允许 – 默认)
- 0 (不允许)
- echo
布尔型,是否允许显示连接 or return them for use by PHP(怎么翻译?!) (FALSE)。默认允许。 - 1 (允许 – 默认)
- 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:
[...] 主要文件 [...]
很有用的文章,我转到自己的站上了,涉及版权的话,我撤下来。
谢谢