有的时候希望在 WordPress 网站上显示一些特殊形式的页面,就需要用到自定义页面模板。本文以 WordPress 内置的 TwentyElven(2011) 和 TwentyTen(2010) 主题为例做个详细介绍。与 WordPress 官方文档中的介绍不同的是,这里着重介绍 WordPress 默认主题静态页面模板的内部结构,以方便我们在自定义的时候进行修改。

文章先介绍一下 WordPress 主题的大致结构,然后以 WordPress 自带的主题,主要是 2011 主题为例说明页面模板的组成,最后给 3 个制作自定义页面模板的样例。

1. WordPress 主题的大致结构

以 Twenty Eleven(2011)主题为例,其文件夹下的文件组织结构如下所示。其中 // 号后面的内容为我的注释说明。相信即使是刚入门的朋友看了这个也能够对 WordPress 的主题有个较全面地了解,修改主题就比较顺利了。

在看下面的解释之前,需要先了解一个情况,那就是 php 代码的复用。我们看到的网页并不一定是由一个单独的 php 文件生成的,而是可以由一个主文件调用多个别的文件组合而成。这样就方便代码的复用:比如我想在每个网页都显示同样的一段话,那就没必要在每个不同网页对 应的不同 php 文件里将这段话重复写一遍,而只需要单独建一个 php 文件来生成这段话,再在主文件中需要的地方引用这个文件就可以了。

WordPress 有个要求,即所有主题的页面模板(主 php 文件,调用它即可形成某个网页页面),或者由它调用的模板中,必须在靠近开头的地方包含 wp_head() (通常放在 header.php 文件中,通过 get_header() 来调用),而在靠近结尾的地方包含 wp_footer()(通常放在 footer.php 文件中,通过 get_footer() 来调用),因为 WordPress 需要在这些地方处理一些数据。所以如果我们打开一个主题中的文件,发现靠近开头有 get_header() 而靠近结尾有 get_footer(),则它必然是一个主 php 文件,用于显示某个/某类网页页面。

为了避免混淆,下面统称一个单独的 php 文件为模板,如果是主文件则又称为页面(或页面模板),生成的我们浏览到的称之为网页。至于 php 文件调用,可以通过自写函数实现,也可以直接使用 php 的 include 或者 require 方法,涉及到 php 编程的问题,这里不再介绍。

twentyelven 文件夹内部文件组织结构图:
// 先介绍重要的
│ index.php // 主题的引导文件,也是默认的首页的模板
│ header.php
// 这个文件包含 HTML 的 <head> 部分(不显示在网页上,但是通过查看网页源文件就能看到), // 同时还可能包含一部分正文(HTML的 <body> 标签内的东西); // get_header() 就是调用它的。 // 比如水景一页下面整个浅灰色色背景的部分都是在这个文件中处理的
│ footer.php
// 用于显示页面下面的内容,包含 </body> 标签 // 比如水景一页上面整个黑色背景的部分都是在这个文件中处理的// 下面 9 个文件都是页面模板,都调用了 get_header() 和 get_footer() // 并且一般都会调用 comments.php 以处理评论列表和评论框
│ 404.php // 用于显示自定义 404 错误网页的页面模板
│ archive.php // 用于显示文章存档网页的页面模板,比如按日期存档等页面
│ author.php // 作者文章存档页面模板(显示该作者所有文章列表网页)
│ category.php // 分类页面模板
│ image.php // 用于显示图片附件,页面模板
│ page.php// 用于显示静态页面(page)的页面模板,通过 get_template_part( 'content', 'page' ) 调用了 content-page.php
│ tag.php // 标签页面模板
│ single.php // 单一文章(post)页面,这是标准形式的 post,调用了 content-single.php
│ showcase.php // 特色文章页面模板;用这个模板来做首页其实挺不错的// 下面这一组 11 个以 content 开头的文件,都只是某个页面的一部分,类似于上面的 comments.php 文件 // Twenty Ten 主题中用的是 loop 开头
│ content-aside.php
│ content-featured.php
│ content-gallery.php
│ content-image.php
│ content-intro.php
│ content-link.php
│ content-page.php
│ content-quote.php
│ content-single.php
│ content-status.php
│ content.php
// 以上 11 个文件是用来处理网页主体部分的; // 包含正文内容,包括文章(post)、静态页面(page),也就是我们通常所说的文章内容; // 2011 主题内置了几种文章形式(post format),可针对不同的文章形式使用不同的模板; // 当然如果你乐意,使用同一个模板也没有问题│ comments.php
// 评论模板;这个不是一个单独的页面,需要在别的页面中调用此模板 // 使用 comments_template( '', true ) 来调用
│ searchform.php // 搜索框模板
│ search.php // “搜索”页面模板,还会调用 searchform.php 来显示搜索框,这是个页面模板
│ sidebar-footer.php
│ sidebar-page.php
│ sidebar.php // get_sidebar() 会调用此文件
// 这三个是用于显示网页上 WordPress 边栏的模板 // sidebar.php 会根据情况调用 sidebar-page.php 或者 sidebar-footer.php 或者同时调用两个
│ functions.php
// 主题自定义的一些功能函数,如果有的话可以覆盖 WordPress 内建函数
│ rtl.css
│ style.css
// 这两个是主题的样式表文件,其中 rtl 只用于显示从右到左写法的语言
│ editor-style-rtl.css
│ editor-style.css
// 这两个是主题提供给后台的编辑器样式文件,一般不修改
│ screenshot.jpg
│ screenshot.png
// 这两个是主题的缩略图
│ readme.txt // 主题的说明文档
│ license.txt // 主题的许可证内容
├─colors // 文件夹,包含选择黑色风格时需要调用的样式文件(省略其下的文件)
│
├─images // 文件夹,包含主题网页上用到的图片(省略其下的文件)
│ │
│ └─headers // 文件夹,包含顶部背景图片(省略其下的文件)
│
├─inc // 文件夹一些内部函数,基本不会自己修改(省略其下的文件)
│ │
│ └─images // 文件夹,包含一些图片(省略其下的文件)
│
├─js // 文件夹,包含主题自己的 JavaScript 文件(省略其下的文件)
│
└─languages // 文件夹,包含语言文件的文件夹(省略其下的文件)

2010 主题与之相差不是太多,不再啰嗦了。

2. 页面模板结构

下面来介绍一个完整的页面模板,仍是以 2011 主题为例。

根据前面的说明我们已经知道,实际上一个完整的页面模板就是 page.php,但是它会调用 header.php 来形成页头,content-page.php 来处理静态页面文章,sidebar.php 来形成边栏,最后是 footer.php 来形成页脚。

其中 header.php、footer.php 和 sidebar.php 是全站一致的,我们一般不做改动,那么剩下的自定义部分就是 page.php + content-page.php 了。

结合 page.php 源代码进行说明,其中红色字体是我的注释。下面是从 2011 主题中直接提出来的源代码:

<?php
/**
* The template for displaying all pages.
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages
* and that other 'pages' on your WordPress site will use a
* different template.
*
* @package WordPress
* @subpackage Twenty_Eleven
* @since Twenty Eleven 1.0
*/上面全都是文件中的注释,php 标签内的注释一般用 /* */ 包围,单行可以直接在注释前前用 // 如果要自定义页面模板,需要在这里添加下面的代码(绿色字体),TemplateName 就是模板名称了。 我们在编辑页面的时候,通过旁边的下拉菜单选择模板的时候看到的就是这个名字。
<?php /** * Template Name: TemplateName */ ?>
<div id="primary"><div id="content" role="main"> 这两行是 HTML 结构标签<?php while ( have_posts() ) : the_post(); ?> 开始处理内容<?php get_template_part( 'content', 'page' ); ?> 调用 content-page.php,实际上可以将 content-page.php 里的内容全部复制过来替换掉这一行<?php comments_template( '', true ); ?> 调用评论 comments.php<?php endwhile; // end of the loop. ?> 内容处理结束</div><!-- #content -->封闭 id="content" 那个 div
</div><!-- #primary -->封闭 id="primary" 那个 div
可以在这里加上 <?php get_sidebar() ?> 那么页面就有了边栏了,不过就需要调整样式了(style.css)
<?php get_footer(); ?>

3. 三种自定义页面模板方式

实际上是 4 种吧,最后的 C 也可以象前面的 A 和 B 那么分的

A. 简单的页面模板 – 包含页面内容

如果只是想简单地在该页面中增加一些别的东西,比如放个 Google 地图什么的,或者将新浪微博嵌入进页面,同时还保留页面其它东西不变,我们就可以直接将自己的代码或内容挑个适当的地方插入进去就行了。

看了上面的注释,应该很容易找到自己要放东西的位置了吧?比如我的 Buzz 页面(该页面评论被我关闭了,所以看不到评论和评论框),现在就是在

<?php get_template_part( 'content', 'page' ); ?>

<?php comments_template( '', true ); ?>

之间插入了新浪微博的小工具代码(新浪微博 ——> 顶部工具条的 帐号 ——> 我的工具中)。

B. 简单的页面模板 – 不包含页面内容

很多时候我们的自定义页面模板中都不会用到页面内容,也就是说,我们新建了这个模板,然后编辑该页面内容的时候都让内容留空了。我们只希望它显示适用于这个页面的自定义内容,比如水景一页网站上的 链接 和 购物通道 页面。这样的话就可以将上面标记为蓝色字体的代码全都替换成自己的自定义内容

C. 复杂的页面模板

可是,很多主题会针对文章(post)和静态页面(page)的内容来设计样式(style.css)。为了让自定义内容样式与网站上其它页面的样 式一致,我们就需要用到 content-page.php 文件中的代码了。将其中的代码(注释就不要了吧)复制过来替换掉上面

<?php get_template_part( 'content', 'page' ); ?>

这一行代码,形成:

<?php
/**
* The template for displaying all pages.
*
* This is the template that displays all pages by default.
* Please note that this is the WordPress construct of pages
* and that other 'pages' on your WordPress site will use a
* different template.
*
* @package WordPress
* @subpackage Twenty_Eleven
* @since Twenty Eleven 1.0
*/上面全都是文件中的注释,php 标签内的注释一般用 /* */ 包围,单行可以直接在注释前前用 // 如果要自定义页面模板,需要在这里添加下面的代码(绿色字体),TemplateName 就是模板名称了。 我们在编辑页面的时候,通过旁边的下拉菜单选择模板的时候看到的就是这个名字。
<?php /** * Template Name: TemplateName */ ?>
<div id="primary"><div id="content" role="main"> 这两行是 HTML 结构标签<?php while ( have_posts() ) : the_post(); ?> 开始处理内容<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
<header class="entry-header">
<h1 class="entry-title"><?php the_title(); ?></h1>
</header><!-- .entry-header --> 这 3 行是内容标题,不想要就删除<div class="entry-content">
<?php the_content(); ?> 这 1 行是内容,不想要就删除
<?php wp_link_pages( array( 'before' => '<div class="page-link"><span>' . __( 'Pages:', 'twentyeleven' ) . '</span>', 'after' => '</div>' ) ); ?> 这 1 行是……我也不知道是什么东西,不想要就删除
</div><!-- .entry-content --><footer class="entry-meta">
<?php edit_post_link( __( 'Edit', 'twentyeleven' ), '<span class="edit-link">', '</span>' ); ?>
</footer><!-- .entry-meta -->这 3 行是那个“编辑”按钮,不想要就删除
</article><!-- #post-<?php the_ID(); ?> --><?php comments_template( '', true ); ?> 调用评论 comments.php<?php endwhile; // end of the loop. ?> 内容处理结束</div><!-- #content -->封闭 id="content" 那个 div
</div><!-- #primary -->封闭 id="primary" 那个 div
可以在这里加上 <?php get_sidebar() ?> 那么页面就有了边栏了,不过就需要调整样式了(style.css)
<?php get_footer(); ?>

然后我们可以将代码放在

<?php the_content(); ?>

这一行的前面或者后面,自己调整。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/wordpress-default-theme-page-template/>。转载请保留此信息及相应链接。

WordPress 默认主题自定义页面模板相关推荐

  1. 轻松入门 | 用 WordPress 和主题模板做网站

    本文来自作者 achair 在 GitChat 上分享「用 WordPress 和主题模板做网站」,「阅读原文」查看交流实录 「文末高能」 编辑 | 嘉仔 本话题围绕如何用 WordPress 和主题 ...

  2. 【原创】定制ROM时自定义默认主题

          众所周知tsk是Windows mobile的主题安装包,用WinCE Manager查看一下tsk文件,你会发现tsk文件主要是由两部分组成.它就像cab文件一样包括必要的文件和注册表项 ...

  3. WordPress如何设置默认主题?

    在WordPress仪表盘的站点健康状态中,会一直提示"有可用的默认主题",哪怕将主题删到只剩下一个,系统依旧会提示,这对于强迫症的我们简直无法忍受 那么如何进行设定,让这个提示消 ...

  4. Wordpress在主题中自定义登陆页面并且禁用自带的登陆页面

    在使用Wordpress制作主题之后,不想要他自带的登陆页面以及地址. 1.新建一个用户页面来接管与登陆相关的动作 //在主题根目录下新建page-login.php,通过action获取用户动作,然 ...

  5. Wordpress模板主题中functions.php常用功能代码与常用插件[ 后台篇](持续收集整理)

    用Wordpress建站的初学者一定会需要用到的Wordpress模板主题中functions.php常用功能代码与常用插件.慢慢持续收集整理....... 目录 一.Wordpress模板主题中fu ...

  6. WordPress常用主题功能函数

    <?php//--------------------------------------------------------引入后台框架---------------------------- ...

  7. wordpress主题开发_指南:WordPress儿童主题开发

    WordPress开发人员开始使用子主题有多种原因. 它们使您有机会在另一个现有主题的基础上自定义独特的布局. 对于想玩自己的主题的初学者来说,这是完美的选择. 此外,许多高级设计将随着时间的推移发布 ...

  8. wordpress入门主题_设置和运行WordPress网站的终极入门指南

    wordpress入门主题 So you've decided to run a WordPress site but have no idea where to start? This tutori ...

  9. WordPress Avada主题评测:非常受欢迎但值得吗? (2022)

    我们正在做WordPress Avada主题评测,肯定不需要太多介绍它.它已经赢得全球600,000+用户.凭借其在短短几年内的巨大人气,该商品已成为有史以来销量第一的商品.在这篇评测中,我们将深入了 ...

最新文章

  1. 【数据结构-图】3.图的最短路径的几种算法(图解+演绎)
  2. 深入浅出地解读Python迭代器和生成器
  3. 分布式代码管理系统GIT
  4. php完整验证码代码
  5. 开源java项目_请问有哪些开源java项目值得学习的?学习完了容易找工作的?
  6. Flutter修仙传第一章:从Form入手学会组件使用
  7. 1900页Python系列PPT分享一:基础知识(106页)
  8. Linux进阶之补充知识篇
  9. win10开始菜单卡住没反应,其他都没问题 看视频也没问题。
  10. ThinkPHP 手册摘录之(跨模块)调用
  11. 将你的现实生活照片变成卡通头像
  12. 大二单片机笔记,串口通信代码【郭天祥】【700字】【勿笑】【原创】
  13. Vue 消息提示通知的几种方式汇总
  14. 开拓者终变落荒者,火箭大胜进第二轮
  15. PDU(Protocol Data Unit)协议数据单元
  16. 计算机科学与技术协会英文,计算机科学与技术专业 毕业论文 外文翻译中英文对照精选.doc...
  17. 如何将图片合并成PDF?教你两个免费方法
  18. Cisco WS-C3560G-24TS-S 中dot1q-tunnel的配置
  19. 2022年天津最新建筑八大员(标准员)模拟考试试题及答案
  20. 极光认证——手机号一键登录

热门文章

  1. 鸣人的影分身(信息学奥赛一本通-T1303)
  2. 高精度减法(洛谷-P2142)
  3. allan方差 imu_MEMS-IMU随机误差的Allan方差分析
  4. python中什么叫函数_Python 基础起步 (十) 什么叫函数?
  5. noip2014到2017初赛提高组看程序写结果、完善程序
  6. netty 远程主机强迫关闭了一个现有的连接_死磕netty系列《一、netty基础概念》...
  7. STM32那点事(6)_定时器(上)
  8. mmdetection工程训练文件配置小结
  9. 网站被黑了被挂马篡改后,如何解决网站被挂马?
  10. 两款高大尚广告GO跳转页PHP源码