热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

WordPress默认主题自定义页面模板

有的时候希望在WordPress网站上显示一些特殊形式的页面,就需要用到自定义页面模板。本文以WordPress内置的TwentyElven(2011&

有的时候希望在 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 的 部分(不显示在网页上,但是通过查看网页源文件就能看到), // 同时还可能包含一部分正文(HTML的 标签内的东西); // get_header() 就是调用它的。 // 比如水景一页下面整个浅灰色色背景的部分都是在这个文件中处理的
│ footer.php
// 用于显示页面下面的内容,包含 标签 // 比如水景一页上面整个黑色背景的部分都是在这个文件中处理的// 下面 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 主题中直接提出来的源代码:

/**
* 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 就是模板名称了。 我们在编辑页面的时候,通过旁边的下拉菜单选择模板的时候看到的就是这个名字。

这两行是 HTML 结构标签 开始处理内容 调用 content-page.php,实际上可以将 content-page.php 里的内容全部复制过来替换掉这一行 调用评论 comments.php 内容处理结束
封闭 id="content" 那个 div
封闭 id="primary" 那个 div
可以在这里加上 那么页面就有了边栏了,不过就需要调整样式了(style.css)

 

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

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

 

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

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

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

 

 

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

 

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

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

 

C. 复杂的页面模板

可是,很多主题会针对文章(post)和静态页面(page)的内容来设计样式(style.css)。为了让自定义内容样式与网站上其它页面的样 式一致,我们就需要用到 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 就是模板名称了。 我们在编辑页面的时候,通过旁边的下拉菜单选择模板的时候看到的就是这个名字。

这两行是 HTML 结构标签 开始处理内容
" >


这 3 行是内容标题,不想要就删除

这 1 行是内容,不想要就删除
'
' . __( 'Pages:', 'twentyeleven' ) . '', 'after' => '
' ) ); ?> 这 1 行是……我也不知道是什么东西,不想要就删除

', '' ); ?>
这 3 行是那个“编辑”按钮,不想要就删除
调用评论 comments.php 内容处理结束
封闭 id="content" 那个 div
封闭 id="primary" 那个 div
可以在这里加上 那么页面就有了边栏了,不过就需要调整样式了(style.css)

 

然后我们可以将代码放在

 

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

 

本文发表于水景一页。永久链接:。转载请保留此信息及相应链接。

 

 



推荐阅读
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了brain的意思、读音、翻译、用法、发音、词组、同反义词等内容,以及脑新东方在线英语词典的相关信息。还包括了brain的词汇搭配、形容词和名词的用法,以及与brain相关的短语和词组。此外,还介绍了与brain相关的医学术语和智囊团等相关内容。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 本文介绍了指针的概念以及在函数调用时使用指针作为参数的情况。指针存放的是变量的地址,通过指针可以修改指针所指的变量的值。然而,如果想要修改指针的指向,就需要使用指针的引用。文章还通过一个简单的示例代码解释了指针的引用的使用方法,并思考了在修改指针的指向后,取指针的输出结果。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
author-avatar
雪中侠客79_932
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有