[转]⼀整套WordPress模板制作的教程
WordPress基本模板⽂件
⼀套完整的WordPress模板应⾄少具有如下⽂件:
style.css: CSS(样式表)⽂件
index.PHP : 主页模板
archive.php : Archive/Category模板
404.php : Not Found 错误页模板
comments.php : 留⾔/回复模板
footer.php : Footer模板
header.php : Header模板
sidebar.php : 侧栏模板
page.php : 内容页(Page)模板
single.php : 内容页(Post)模板
php好看主页源码searchform.php : 搜索表单模板
search.php : 搜索结果模板
当然,具体到特定的某款模板,可能不⽌这些⽂件,但⼀般⽽⾔,这些⽂件是每套模板所必备的。
基本条件判断Tag
is_home() : 是否为主页
is_single() : 是否为内容页(Post)
is_page() : 是否为内容页(Page)
is_category() : 是否为Category/Archive页
is_tag() : 是否为Tag存档页
is_date() : 是否为指定⽇期存档页
is_year() : 是否为指定年份存档页
is_month() : 是否为指定⽉份存档页
is_day() : 是否为指定⽇存档页
is_time() : 是否为指定时间存档页
is_archive() : 是否为存档页
is_search() : 是否为搜索结果页
is_404() : 是否为 “HTTP 404: Not Found” 错误页
is_paged() : 主页/Category/Archive页是否以多页显⽰
Header部分常⽤到的PHP函数
<?php bloginfo(’name’); ?> : 博客名称(Title)
<?php bloginfo(’stylesheet_url’); ?> : CSS⽂件路径
<?php bloginfo(’pingback_url’); ?> : PingBack Url
<?php bloginfo(’template_url’); ?> : 模板⽂件路径
<?php bloginfo(’version’); ?> : WordPress版本
<?php bloginfo(’atom_url’); ?> : Atom Url
<?php bloginfo(’rss2_url’); ?> : RSS 2.o Url
<?php bloginfo(’url’); ?> : 博客 Url
<?php bloginfo(’html_type’); ?> : 博客⽹页Html类型
<?php bloginfo(’charset’); ?> : 博客⽹页编码
<?php bloginfo(’description’); ?> : 博客描述
<?php wp_title(); ?> : 特定内容页(Post/Page)的标题
模板常⽤的PHP函数及命令
<?php get_header(); ?> : 调⽤Header模板
<?php get_sidebar(); ?> : 调⽤Sidebar模板
<?php get_footer(); ?> : 调⽤Footer模板
<?php the_content(); ?> : 显⽰内容(Post/Page)
<?php if(have_posts()) : ?> : 检查是否存在Post/Page
<?php while(have_posts()) : the_post(); ?> : 如果存在Post/Page则予以显⽰
<?php endwhile; ?> : While 结束
<?php endif; ?> : If 结束
<?php the_time(’字符串’) ?> : 显⽰时间,时间格式由“字符串”参数决定,具体参考PHP⼿册
<?php comments_popup_link(); ?> : 正⽂中的留⾔链接。如果使⽤ comments_popup_script() ,则留⾔会在新窗⼝中打开,反之,则在当前窗⼝打开
<?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 wp_list_pages(); ?> : 显⽰Page列表
<?php wp_list_categories(); ?> : 显⽰Categories列表
<?php next_post_link(’ %link ‘); ?> : 下⼀篇⽂章链接
<?php previous_post_link(’%link’); ?> : 上⼀篇⽂章链接
<?php get_calendar(); ?> : ⽇历
<?php wp_get_archives() ?> : 显⽰内容存档
<?php posts_nav_link(); ?> : 导航,显⽰上⼀篇/下⼀篇⽂章链接
<?php include(TEMPLATEPATH . ‘/⽂件名’); ?> : 嵌⼊其他⽂件,可为定制的模板或其他类型⽂件
与模板相关的其他函数
<?php _e(’Message’); ?> : 输出相应信息
<?php wp_register(); ?> : 显⽰注册链接
<?php wp_loginout(); ?> : 显⽰登录/注销链接
<!–next page–> : 将当前内容分页
<!–more–> : 将当前内容截断,以不在主页/⽬录页显⽰全部内容
<?php timer_stop(1); ?> : ⽹页加载时间(秒)
<?php echo get_num_queries(); ?> : ⽹页加载查询量
介绍如何定义index.php以及如何派⽣出其它⽂件,在index.php⽂件中,在body元素内,新建如下结构化标记元素,各元素都带有不同的id 属性:
<div id=”page”>
<div id=”header”></div>
<div id=”content”></div>
<div id=”sidebar”></div>
<div id=”footer”></div>
</div>
这些不同的属性,分别代表着不同的区域,让⼈⼀看就知道是什么意思,下⾯我们重点探讨header,content,sidebar,footer部分的构建。
(⼀).构建header
<div id=”header”></div> 元素的两个标签之间输⼊下列代码:
<h1>
<a href=”<?php bloginfo(’url’); ?>” title=”<?php bloginfo(’name’); ?>”>
<?php bloginfo(’name’); ?>
</a>
</h1>
<p><?php bloginfo(’description’); ?></p>
这⾥⽤到了 WP 内置的 bloginfo 函数来⽣成内容,其中:
bloginfo(’url’)返回⽹站主页链接;
bloginfo(’name’)返回⽹站标题;
bloginfo(’description’)返回⽹站描述。
保存 index.php ⽂件,然后在浏览器中按 F5 刷新⼀下页⾯,看能看到什么?再通过“查看源⽂件”,核对⼀下由 WP 的 bloginfo() 函数⽣成的相关信息。
(⼆).构建content
在 <div id=”content”></div> 中,我们要通过循环显⽰博⽂,包括每个博⽂的标题、作者、发表⽇期以及其他相关信息。并且,可以分页显⽰博⽂(取决于 WP 后台的设置)。
⾸先,在 <div id=”content”> 与 </div> 之间输⼊下列代码:
<?php while (have_posts()) : the_post(); ?> <div class=”post” id=”post-<?php the_ID() ?>”>
<!– 博⽂标题及链接 –>
<h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”<?php the_title(); ?>”>
<?php the_title(); ?></a></h2>
<!– 发表⽇期 –>
<div class=”post-date”>
<span class=”post-month”><?php the_time(’M’) ?></span>
<span class=”post-day”><?php the_time(’d’) ?></span>
</div>
<!– 作者 –>
<span class=”post-author”><?php _e(’Author’); ?>:<?php the_author(’, ‘) ?></span>
<!– 类别 –>
<span class=”post-cat”><?php _e(’Categories’); ?>:<?php the_category(’, ‘) ?></span>
<!– 注释 –>
<span class=”post-comments”>
<?php comments_popup_link(’No Comments ?’, ‘1 Comment ?’, ‘% Comments ?’); ?></span>
<!– 内容 –>
<div class=”entry”>
<?php the_content(’更多内容 ?’); ?>
</div>
<!– 其他元(Meta)数据 –>
<div class=”post-meta”>
<?php edit_post_link(’编辑’,’ | ‘,”); ?>
</div> </div>
<?php endwhile; ?><div class=”navigation”>
<span class=”previous-entries”><?php next_posts_link(’前⼀篇’) ?></span> <span class=”next-entries”><?php previous_posts_link(’后⼀篇’) ?></span>
</div>
<?php else : ?>
<div class=”post”>
<h2><?php _e(’Not Found’); ?></h2>
</div><?php endif; ?>
这两⾏,是 WP 中的 while 循环。其中,while 语句通过测试 have_posts() 决定是否调⽤ the_post() 函数。如果测试 have_posts() 返回true,则调⽤ the_post() 函数,初始化与博⽂相关的内置变量。
在 while 循环内部,⾸先要注意通过 div、h2、span 这三个元素定义的嵌套语义结构,以及相应元素的 class 和 id 属性(其中只为 class 为post 的 div 元素定义了⼀个 id 属性--post-<?php the_ID() ?>)。这是将来使⽤ CSS 控制外观的关键所在。在这个 div 元素中,为显⽰博⽂的相关信息,分别调⽤了以下 WP 函数:
the_ID():返回博⽂ ID;
the_permalink():返回博⽂固定链接 URL;
the_title():返回博⽂标题;
the_time(’M’):返回发表⽇期中的⽉份;
the_time(’d’):返回发表⽇期中的天;
the_author():返回博⽂作者;
the_category():返回博⽂的类别;
the_content():返回博⽂的内容,其中的参数表⽰⽤于“更多内容”的链接⽂本;
以上函数都是以 the_ 开头的,加上后⾯的函数名不仅颇有⾃解释的味道,⽽且令⼈联想到 this 关键字。此外
_e() 函数是⼀个包装函数,这个函数主要⽤于语⾔的转换,如果调⽤该函数并传递标准的 WP 术语,如:Author 或 Categories,则返回你相应语⾔包中的译⽂,在中⽂包中分别是“作者”和“类别”。当然,不⽤也可。但会失去⼀些适应性。
还有,omments_popup_link() 和 edit_post_link() 两个函数,分别显⽰注释和编辑链接,这⾥不多说了。
另外,在 <?php endwhile; ?> 后⾯显⽰了分页导航链接,调⽤的函数分别是:next_posts_link() 和 previous_posts_link()。此时,如果你的博⽂总数⼩于 WP 后台设置的最多显⽰数⽬,⽐如:你在后台设置最多显⽰ 5 篇,⽽你有 10 篇博⽂,就会分页显⽰;否则,如果你的博⽂少于或等于 5 篇则看不到分页导航链接。
最后,不要丢下 <?php else : ?> 语句后⾯的内容:
<div class=”post”>
<h2><?php _e(’Not Found’); ?></h2>
</div>
显然,这是⼀个错误提⽰信息。
(三).构建sidebar
sidebar 的内容当然要在 <div id=”sidebar”></div> 元素中构建了。sidebar,中⽂叫侧边栏,其中可以包含很多内容。⽐如:分类、页⾯、链接、⽇历等等导航及相关信息。
在 WP 中,sidebar 中的内容都以⽆序(ul)或有序(ol)列表的形式输出。因此,需要在 <div id=”sidebar”></div> 中输⼊以下标记:
<ul>
<?php if ( !function_exists(’dynamic_sidebar’) || !dynamic_sidebar() ) : ?>
<li id=”search”>
<?php include(TEMPLATEPATH .’/searchform.php’); ?>
</li> <li id=”calendar”>
<h2><?php _e(’Calendar’); ?></h2>
<?php get_calendar(); ?>
</li> <?php wp_list_pages(’title_li=<h2>页⾯</h2>’); ?> <li class=”catnav”>
<h2><?php _e(’Categories’); ?></h2>
<ul>
<?php wp_list_cats(’sort_column=name&optioncount=1&hierarchical=0′); ?>
</ul>
</li>
<li class=”archivesnav”>
<h2><?php _e(’Archives’); ?></h2>
<ul>
<?php wp_get_archives(’type=monthly’); ?>
</ul>
</li>
<li class=”blogrollnav”>
<h2><?php _e(’Links’); ?></h2>
<ul>
<?php get_links(’-1′, ‘<li>’, ‘</li>’, ‘<br />’, FALSE, ‘id’, FALSE, FALSE, -1, FALSE); ?>
</ul>
</li>
<li class=”meta”>
<h2><?php _e(’Meta’); ?></h2>
<ul><?php wp_register(); ?><li><?php wp_loginout(); ?></li>
<?php wp_meta(); ?></ul>
</li>
<?php endif ?>
</ul>
以上代码从第三⾏开始,分别通过包含 searchform.php 显⽰搜索表单;
调⽤ get_calendar() 函数显⽰⽇历;
调⽤ wp_list_pages() 函数显⽰页⾯导航;
调⽤ wp_list_cats() 函数显⽰分类导航;
调⽤ wp_get_archives() 函数显⽰存档导航;
调⽤ get_links() 函数显⽰链接导航。
在构建侧边栏时,要为⽣成搜索框新建⼀个 searchform.php ⽂件,其内容如下:
<form method=”get” id=”searchform” action=”<?php bloginfo(’home’); ?>/”>
<div>
<input type=”text” value=”<?php echo wp_specialchars($s, 1); ?>” name=”s” id=”s” size=”15″ /><br />
<input type=”submit” id=”searchsubmit” value=”Search” />
</div>
</form>
将其保存在 myTheme ⽂件夹中,通过 include 语句包含进来就可以了。注意,常量 TEMPLATEPATH 中保存的是模板路径。
最后,说明⼀下以上代码第⼆⾏和倒数第⼆⾏。显然这是⼀个 if 语句块。那这个 if 语句块包含 sidebar 是何⽤意呢?这是部件化侧边栏的需要,就是让 sidebar 适合 Widget 插件(WP 2.0 后内置了 Widget,所以不⽤再安装了)。如果要使⽤ Widget 插件,必须对 sidebar 进⾏部件化。这样,在 WP 后台通过 Widget 插件你就可以使⽤拖动来⽅便地定义侧边栏的组件了。部件化侧边栏,除了在 ul 元素内侧放⼊这个 if 语句之外,还必须在 myTheme ⽂件夹中建⽴⼀个⽂件 functions.php,其内容如下:
<?php
if ( function_exists(’register_sidebar’) )
register_sidebar(array(
‘before_widget’ => ‘<li id=”%1$s” class=”widget %2$s”>’,
‘after_widget’ => ‘</li>’,
‘before_title’ => ‘<h2 class=”sidebartitle”>’,
‘after_title’ => ‘</h2>’,
));
>
(四).构件footer
footer 中⼀般都⼀些版权信息和不太重要的链接。所以可以在 <div id=”footer”></div> 元素中简单地放⼊下列代码:
<p>Copyright ? 2007 <?php bloginfo(’name’); ?></p>
⾄此,核⼼ index.php ⽂件就算是⼤功告成了!
接下来,是拆分 index.php 和基于 index.php 派⽣⼦模板⽂件。
在 myTheme ⽂件夹中新建 header.php、sidebar.php 和 footer.php 三个⽂件。把 index.php 中的 <div id=”header”></div>、<div
id=”sidebar”></div> 和 <div id=”footer”></div> 三个结构化元素及其内容分别转移(剪切)到这三个新⽂件中。然后,在 <div id=”header”> </div> 原来的位置处输⼊代码:
<?php get_header();?>
在 <div id=”sidebar”></div> 原来的位置处输⼊代码:
<?php get_sidebar();?>
在 <div id=”footer”></div> 原来的位置处输⼊代码:
<?php get_footer();?>
前⾯说过,这三个 get 函数是 WP 专门为包含结构化的⽂件定义的。现在你的 index.php ⽂件应该如下所⽰:
<!DOCTYPE html>
<html>
<meta http-equiv=”Content-Type” content=”<?php bloginfo(’html_type’); ?>; charset=<?php bloginfo(’charset’); ?>” />
<title><?php bloginfo(’name’); ?> <?php if ( is_single() ) { ?> ? Blog Archive <?php } ?> <?php wp_title(); ?></title>
<meta name=”generator” content=”WordPress <?php bloginfo(’version’); ?>” />
<!– leave this for stats –>
<link rel=”stylesheet” href=”<?php bloginfo(’stylesheet_url’); ?>” type=”text/css” media=”all” />
<link rel=”stylesheet” href=”<?php bloginfo(’stylesheet_directory’); ?>/print.css” type=”text/css” media=”print” />
<link rel=”alternate” type=”application/rss+xml” title=”<?php bloginfo(’name’); ?> RSS Feed” href=”<?php bloginfo(’rss2_url’); ?>” />
<link rel=”pingback” href=”<?php bloginfo(’pingback_url’); ?>” /><?php wp_head(); ?>
</head>
<body>
<div id=”page”><?php get_header(); ?> <!– content –>
<div id=”content”>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<div class=”post” id=”post-<?php the_ID() ?>”>
<!– 博⽂标题及链接 –>
<h2><a href=”<?php the_permalink() ?>” rel=”bookmark” title=”<?php the_title(); ?>”>
<?php the_title(); ?></a></h2>
<!– 发表⽇期 –>
<div class=”post-date”>
<span class=”post-month”><?php the_time(’M’) ?></span>
<span class=”post-day”><?php the_time(’d’) ?></span>
</div>
<!– 作者 –>
<span class=”post-author”><?php _e(’Author’); ?>:<?php the_author(’, ‘) ?></span>
<!– 类别 –>
<span class=”post-cat”><?php _e(’Categories’); ?>:<?php the_category(’, ‘) ?></span>
<!– 注释 –>
<span class=”post-comments”>
<?php comments_popup_link(’No Comments ?’, ‘1 Comment ?’, ‘% Comments ?’); ?></span>
<!– 内容 –>
<div class=”entry”>
<?php the_content(’更多内容 ?’); ?>
</div>
<!– 其他元(Meta)数据 –>
<div class=”post-meta”>
<?php edit_post_link(’编辑’,’ | ‘,”); ?>
</div> </div>
<?php endwhile; ?> <div class=”navigation”>
<span class=”previous-entries”>
<?php next_posts_link(’前⼀篇’) ?></span> <span class=”next-entries”><?php previous_posts_link(’后⼀篇’) ?></span>
</div>
<?php else : ?>
<div class=”post”>
<h2><?php _e(’Not Found’); ?></h2>
</div><?php endif; ?>
</div><!– end content –><?php get_sidebar(); ?> <?php get_footer(); ?></div>
</body>
</html>
然后,是派⽣⼦模板⽂件。把这个“模块化”的 index.php ⽂件另存为 single.php、page.php、archive.php、 search.php 和 category.php。当然,都保存在 myTheme ⽂件夹中。这样,WP 在显⽰页⾯时就会调⽤相应的页⾯⽂件了。⽐如,显⽰博⽂详细内容时,会调⽤
single.php;⽽显⽰页⾯内容时,则调⽤ page.php。
最后,要做的⼯作就是⾃定义这些⼦模板⽂件。
From:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。