wordpress的模板和主题核心是index.php,style.css两个文件。嵌入模块文件名固定,当嵌入模块文件缺失,则自动调用index.php作为默认嵌入模块。
模板的区分取决于theme目录下的子目录名称。模板只能存放在该目录下,并且按照固定的规则命名。
index.php的正文模块随着所处页面的不同,嵌入不同的模块文件。以下是常规文件名及定义:
• single.php — 单一日志文件,用于显示单一日志
• page.php — 页面模板文件,用于显示静态页面
• archive.php — 存档文件,用于显示存档页面
• category.php — 类别文件,用于显示类别页面
• search.php — 搜索文件,用于显示搜索结果
• 404.php — 错误文件,用于显示404页面
• comments.php — 评论文件,用于显示评论和评论框
模块文件由特定的调用标签组成。标签格式:<?php bloginfo(’stylesheet_url’); ?> 是一个 PHP 函数。解释如下:
<?php – 开始 PHP 代码
bloginfo(’stylesheet_url’) – 调用 style.css 文件所在的路径
; – 停止调用函数。分号是用来结束一个 PHP 语句。
?> – 结束 PHP 代码
建议的学习方法是创建一个空的模板文件,并且设置应用,然后一边加入特定的标签,一边查看标签的执行结果。
重复的数据要靠WORDPRESS的循环语句来获得。例如
<?php if(have_posts()) : ?>
<?php while(have_posts()) : the_post(); ?>
<?php endwhile; ?>
<?php posts_nav_link(); ?>
<?php else : ?>
<?php endif; ?>
第一,if(have_posts()) 检查博客是否有日志,
第二,while(have_posts()) 执行 the_post() 去调用日志。而 Else 是当博客完全没有日志的时候执行的。 while() 和 endwhile; 应该嵌套在 if() 和 else :之间。 所以<?php else : ?> 应该在 <?php endwhile; ?> 之后。
第三,<?php posts_nav_link(); ?>是表示列表页中,上一页,下一页的代码,这组代码可以定制三个元素。
简单的理解就是一种嵌套关系,最外围判断是否条件成立,第二层判断条件成立后的条件循环取什么样的数据,循环中心是循环数据的字段组。
被隔开的段落文字,在被调用后会自动带上P标签。
作为支持多语言的模板,wordpress中会出现这样的标签:
<?php _e(’Filed under:’); ?>
之所以将Filed under放在e()中,是为了他的翻译需要。如果不支持多语言,可以直接放代码。
添加分类链接列表:
<?php wp_list_cats(’sort_column=name&optioncount=1&hierarchical=0′); ?>
• sort_column=name – 把分类按字符顺序排列
• optioncount=1 – 显示每个分类含有的日志数
• hierarchial=0 – 不按照层式结构显示子分类,这就解释了为什么子分类 子分类链接是
列在列表中第一级。
• & – 每次增加另一个参数的时候,需在它之前要输入 & 用来把和现有的参数区
分开。如 & 在 sort_column 和 optioncount之间
wp_list_cats标签在返回结果的时候,会自动带上LI,所以不需要给他增加LI标签。页面链接列表与此类似。
添加存档链接列表:
<li><h2><?php _e(’Archives’); ?></h2>
<ul>
<?php wp_get_archives(’type=monthly’); ?>
</ul>
</li>
• <li> – 开始列表元素
• <h2> – 开始子标题
• <?php _e(’Archives’); ?> – 子标题文本
• </h2> – 结束子标题
• <ul> – 开始在存档链接这个无序列表
• <?php wp_get_archives(’type=monthly’); ?> – 按月调用存档列表链接,并把每个链接放入 <li> 和 </li> 标签中。如果查看源代码,我们会看到wp_get_archives() 为每个链接产生了列表元素(LI)标签,就像wp_list_cats() 这个函数一样。
• </ul> – 结束在子标题下的无序列表
• </li> – 结束列表元素
添加友情链接:
<?php get_links_list(); ?>
增加搜索框:
搜索框采取嵌入页面的方式载入。所嵌入的页面和index.php模板在一个目录下。
<?php include(TEMPLATEPATH . ‘/searchform.php’); ?>
include() – 导入任何你想导入的文件。这和使用 WordPress 模板函数去调用模板文件是不同的,因为 include() 只是简单导入已经存在的文件。这里是调用在 searhform.php 文件中的代码。被导入的信息应该在一个博客上基本不会
被改变的。
• TEMPLATEPATH – 主题文件夹的位置,这里是:wp-content/themes/tutorial
• ‘/searchform.php’ – 文件名:/searchform.php
• 在 TEMPLATEPATH 和 “/searchform.php” 中间的点 点把它们连接起来,所以最终得到:wp-content/themes/tutorial/searchform.php
添加日历:
<li id=”calendar”><h2><?php _e(’Calendar’); ?></h2>
<?php get_calendar(); ?>
</li>
• <?php _e(’Calendar’); ?> – 输出 Calendar 这个词
• get_calendar() – 使用 get_calendar() 这个 WP 函数调用日历
添加登录登出
wp_register() 这个函数能产生一组 <li> 和 </li> 标签,如果你没有登陆,它显示注册(Register)链接,如果登录了,它显示的是 站点管理(Site Admin)的链接。
wp_loginout() 不会产生列表元素标签,所以需要我们手工输入列表元素标签,当你没有登录的时候,得到的是 登录(Login) 的链接,当已经登录的时候,得到的是登出(Logout)链接
wordpress的侧边栏是可以定制的,也就是窗体化(widgetized)。窗体化需要一个必备文件functions.php。然后再侧边栏的UL内地一层,输入
<?php if ( function_exists(’dynamic_sidebar’) && dynamic_sidebar() ) : else :?>
及
<?php endif; ?>
具体运作模式需要实际测试下才能体会。
wordpress的主题中,style.css开头的描述是有固定格式的,特别是发布的主题,需要遵守这个传统约定。
样式表没有什么特别的,从略。
将制作完成的标签代码部分分拆成数个文件。然后用标签将他们组合在一起。例如:
将文件头部分切成一个header.php文件,在INDEX.PHP中<?php get_header(); ?>调用。这这里有专门的调用标签,而不是用PHP嵌入代码<?php include (TEMPLATEPATH . ‘/header.php’); ?>。
把右侧代码分切成sidebar.php,调用代码:<?php get_sidebar(); ?>
把底部代码分切成footer.php,调用代码:<?php get_footer(); ?>
完成后,文件变成了:index,style,header,sidebar,footer。
然后为各种不同的页面,变造index.php的内容。
类别页面可以使用archive.php显示内容。按照wordpress的传统,在首页列表中展示的是所有文章的所有内容,而在栏目中格式一样,但去的是简介内容。这样做是为了避免GOOGLE因为查阅到相同内容而做出处罚。但是个人认为首页载入全部内容,拖慢速度。具体如何设置标签,需要自己斟酌。archive.php的产生很简单,复制一份index.php,将标签改为适合archive.php的即可。
搜索结果页面search.php很简单,默认格式下把archive.php复制一份,改名字即可。如果文件不存在,搜索结果就自动调用index.php。
分页文件和文章模板分别是page.php和single.php。把index.php复制成两个文件名即可。然后分别进行一些改造。
page.php部分:
第一,在 page.php 中的 <?php the_content(); ?> 下输入以下代码:
<?php link_pages(’<p><code>Pages:</strong> ‘, ‘</p>’, ‘number’); ?>
和
<?php edit_post_link(’Edit’, ‘<p>’, ‘</p>’); ?>
用于显示页面的分页链接。
第二,从 page.php 中移除 postmetadata 代码。
显示可以用来编辑静态页面的编辑链接
第三,在 page.php 中移除 posts_nav_link() 或者导航模块。
通常页面是没有分类,并且通常不想给他们显示创建时间,所以需要去移除postmetadata。同样要移除 posts_nav_link() 代码因为静态页面 静态页面不会显示后一页和前一页的链接。
single.php部分:
在 single.php 中的 <?php the_content() ?> 下输入:
<?php link_pages(’<p><strong>Pages:</strong> ‘, ‘</p>’, ‘number’); ?>
是的,这是相同的用于编码页面的分页链接的代码。同样我们也可以把日志分成多篇子日志。
第二,在 postmetadata 区域,移除 <?php comments_popup_link(); ?> 函数和前面的 <br /> 标签。不要移除整个 postmetadata。因为创建数据对于文章页是必要的。
第三,用以下代码取代 <?php posts_nav_link(); ?>:
<?php previous_post_link(’? %link’) ?> <?php next_post_link(’ %link ?’) ?>
用来调用上一篇下一篇日志,而不是列表页。
至此,常见的主题模块概念就完成了。下面是评论模板。
评论模板的文件名是comments.php。
在文章页中调用评论:
<div class=”comments-template”>
<?php comments_template(); ?>
</div>
这个代码也可以用在页面文件中。
加入评论代码后,需要验证以下文件,是否会出现错误:
• 主页 — Home page
• 存档页面 — Archive pages
• 类别页面 — Category pages (如果你自定义了类别页面)
• 搜索结果页面 — Search result pages
• 静态页面 — Pages (如:About)
• 单一日志页面 — Single post view page
• 单一日志没有留言 — Single post with no comments
• 单一日志有留言 — Single post with comments
• 单一日志含有必须登录信息 — Single post with must login message• 单一日志没有必须登录信息 — Single post with no login required message
• 密码保护的单一日志并有留言 — Password protected single post with comments
留言列表是一个OL,有序列表。