wordpress模板文件结构超详解
wordpress网站建设中,主题的制作是最为核心的环节。了解模板文件结构是模板制作的第一步,本文所讲的模板文件结构包括两部分,一是指以文件名为概念的文件结构,二是指文件内容的代码结构。
一、如何使模板文件起作用 ↑
wordpress模板文件夹放置于/wp-content/themes/下,开发者只需将自己的模板文件全部置于一个文件夹中,将文件夹置于该目录下,wordpress系统就会自动检测,发现模板文件可用时就会在后台“主题”中列出该模板。
我们创建一个文件夹,命名为mytheme,在mytheme中创建两个文件,分别是style.css,index.php,functions.php,用文本编辑器编辑这两个文件。在style.css首置入如下代码:
/*
Theme Name: utubon.com
Theme URI: http://www.phpstudio.info/
Description: PHP网站建设工作室
Author: PHP网站建设
Version: 1.0
License:
License URI:
Tags: 工作室
*/
保存即可。然后将mytheme文件夹放入到wordpress主题目录中,进入后台查看,是否有了一个新的主题。
其实wordpress对主题的检测紧限于style.css,index.php,有了这两个文件和上面的声明,即可在后台检测到新的主题。现在开始你可以在index.php中写网页结构,在style.css中写样式,在functions.php中添加新的函数和功能了。
你会问,其他的主题中,为什么会有这么多文件呢,如sidebar.php,page.php,single.php,category.php等。wordpress使用模板通过函数的调用,让模板之间形成完整的整体,例如在index.php中你会看到get_header()即调用文件名为header.php的模板文件, get_footer()亦然。get_template_part( 'loop', 'index' );则是调用模板loop-index.php。wordpress并非傻瓜的像include()函数一样包含这些文件,而是对文件的存在与否要进行判断,如果不存在该文件将用对应的相关文件代替,这需要你查看开发文档中该函数的具体解释。
二、一般情况下模板文件列表和对应的函数 ↑
我们查看所有的模板都会获悉该主题所拥有的模板文件,一般情况下,模板文件拥有下面的这些文件,他们分别对应了自己的调用函数,一并列出:
| 文件名 | 一般作用 | 对应的函数 | 备注(使用技巧) |
| style.css | 样式表 | <?php bloginfo( 'stylesheet_url' ); ?>调用地址 | |
| index.php | wordpress识别首页 | 自动识别 | |
| functions.php | 包含增函数和新功能 | 自动识别 | |
| header.php | 头部 | get_header() | |
| footer.php | 尾部 | get_footer() | |
| sidebar.php | 边侧栏 | get_sidebar('foot')(无参数则调用sidebar.php) | 参数foot指文件sidebar-foot.php类推 |
| loop.php content.php | 内容循环 | get_template_part( 'loop', 'index' )和sidebar一样 | 参数的意思是调用模板loop-index.php类推如果get_template_part( 'content','single' ); |
| 404.php, search.php, page.php, single.php | 分别是404页,搜索页,单独页面,文章内容页 | 自动识别,和index.php一样,使用上述函数,没有该文件的话用index.php | |
| archive.php, category.php, tag.php, author.php | 分别是归档页,分类页,标签页,作者页 | 同上,但如果只有archive.php或category.php没有其他页,其他页用archive.php代替或category.php代替 |
除了上面这些页面之外,当然还会有主题特殊的文件,如主题自身的图片,js代码screenshot.png是主题预览图片,自动检测并在后台显示。上面没有提到的文件不一定不存在,如loop-tag-cloud.php,你可以用get_template('loop','tag-cloud')来调用,这是一类上述衍生文件。其他特殊文件如果没有特定的说明或功能,也可用include()等php函数将其包含。上面的文件除了style.css,index.php都是可选文件,例如模板中没有很多文件。
三、文件代码结构:写一个最简单的模板 ↑
正如文章开头提到,最简单的模板就只有style.css和index.php这两个文件,接下来就用这个最简单的模板来讲解模板文件代码结构。如果你懂得html网页设计,并对wordpress函数有一些了解,制作自己的模板并不困难,完全可以仿照别人的模板,慢慢完成自己的模板。
这里强烈建议你采用标准的网页设计方法,放弃table布局,认真学习css,采用div+css布局。
请先自己设计出html代码(一个页面,首页),加入一些测试的文章、图片、特效等,然后按照本文的方法进行修改。然后将所有代码拷贝到index.php中,这时你甚至可以不用理会style.css。在index.php中,我给出的基本框架如下:
<html>
<head>
<title>wordpress</title>
<style type="text/css" media="screen">
html { margin-top: 28px !important; }
* html body { margin-top: 28px !important; }
</style>
</head>
<body>
<div id="wapper">
<div id="header"></div>
<div id="container">
<div id="left"></div>
<div id="right"></div>
</div>
<div id="footer"></div>
</div>
</body>
</html>
上面的只是最基本的框架,通过css样式控制页面的宽度、呈现颜色、表现形式等。
我们将头部定义到<div header>的地方,头部中既包含了网页的css、meta声明,也包含了网页顶部的一些元素,如导航条、logo、公告等。在头部中,我们需要修改一些内容:
1、引入style.css:<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo( 'stylesheet_url' ); ?>" />
2、引入wordpress本身需要添加的代码:
<?php
if ( is_singular() && get_option( 'thread_comments' ) )
wp_enqueue_script( 'comment-reply' );
wp_head();
?>
3、用下面的代码替换<title>的内容,以显示网页标题
<?php
global $page, $paged;
wp_title( '|', true, 'right' );
bloginfo( 'name' );
$site_description = get_bloginfo( 'description', 'display' );
if ( $site_description && ( is_home() || is_front_page() ) )
echo " | $site_description";
if ( $paged >= 2 || $page >= 2 )
echo ' | ' . sprintf( __( 'Page %s', 'twentyten' ), max( $paged, $page ) );
?>
以上是网站声明部分,这些内容作为wordpress应该拥有的内容,最好不要缺少,当然你也可以根据自己的需要和想法替换为自己想要的内容。例如在wp_title()后面添加echo '你想要添加的内容';从而增加你的网页标题的信息。
4、修改你的<div header>的内容,导航可以使用wordpress后台菜单用wp_nav_menu()函数来实现,要想使用该功能,还需要在functions.php中预先初始化主题,让主题支持后台菜单功能。或用分类列表代替用wp_list_categories()函数来实现,这些函数需要你慢慢学习他们的使用方法。
接下来是内容的部分,我们将文章在首页的呈现列表放在<div left>中,用下面的代码来实现文章列表的呈现。
<?php while(has_posts()) : the_post(); ?>
<div id="post">
<div id="post-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></div>
<div id="post-content"><?php the_content(); ?></div>
</div>
<?php endwhile; ?>
以上是最最简单的文章循环了,将列出对应条数的最新文章标题和内容。作为开发者,你需要根据自己的想象和需要,结合js效果、css样式,实现自己最终想要的结果。
接下来是sidebar,我们将sidebar放在<div right>中,使用下面这段代码,实现在后台放置widget:
<?php if(is_active_sidebar('sidebar-widget-area-primary')): ?>
<div id="primary">
<?php dynamic_sidebar( 'sidebar-widget-area-primary' ); ?>
</div><!--//end of primary-->
<?php endif; // end primary widget area ?>
不过目前这还是无法实现的,我们需要在functions.php中定义一个widget,这样才能实现后台小工具的使用,并在这里表现出来。
网页footer尾部可以由你自由发挥,等你慢慢熟练了wordpress模板的写作之后,可以实现很多调用和特效,例如在底部放入友情链接等。
四、functions.php的初始化定义 ↑
虽然style.css和index.php就可以让主题工作,但这样的主题是没有任何功能的,在前文中你已经发觉这个问题。怎样让主题拥有一些功能呢,如小工具widget的使用,菜单的使用,特色图片的使用等等。你可以在网络上其他文章中发现这些功能如何激活,本文只是做一个最简单的解释,丰富的功能需要你自己慢慢学习。
add_action( 'after_setup_theme', 'twentyten_setup' );
if (!function_exists( 'twentyten_setup')):
function twentyten_setup() {
add_editor_style();
add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );
add_theme_support( 'post-thumbnails' );
add_theme_support( 'automatic-feed-links' );
load_theme_textdomain( 'twentyten', TEMPLATEPATH . '/languages' );
$locale = get_locale();
$locale_file = TEMPLATEPATH . "/languages/$locale.php";
if ( is_readable( $locale_file ) )
require_once( $locale_file );
register_nav_menus( array(
'primary' => __( 'Primary Navigation', 'twentyten' ),
) );
add_custom_background();
if ( ! defined( 'HEADER_TEXTCOLOR' ) )
define( 'HEADER_TEXTCOLOR', '' );
if ( ! defined( 'HEADER_IMAGE' ) )
define( 'HEADER_IMAGE', '%s/images/headers/path.jpg' );
define( 'HEADER_IMAGE_WIDTH', apply_filters( 'twentyten_header_image_width', 940 ) );
define( 'HEADER_IMAGE_HEIGHT', apply_filters( 'twentyten_header_image_height', 198 ) );
set_post_thumbnail_size( HEADER_IMAGE_WIDTH, HEADER_IMAGE_HEIGHT, true );
if ( ! defined( 'NO_HEADER_TEXT' ) )
define( 'NO_HEADER_TEXT', true );
}
endif;
if(function_exists('register_sidebar')){
register_sidebar(array(
'name'=>'上部边栏',
'id' => 'sidebar-widget-area-primary',
'description' => '',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h3><span>',
'after_title' => '</span></h3>',
));
register_sidebar(array(
'name'=>'下部边栏',
'id' => 'sidebar-widget-area-secondary',
'description' => '',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h3><span>',
'after_title' => '</span></h3>',
));
register_sidebar(array(
'name'=>'边栏右边',
'id' => 'sidebar-widget-area-right',
'description' => '一般放分类列表',
'before_widget' => '<div>',
'after_widget' => '</div>',
'before_title' => '<h3><span>',
'after_title' => '</span></h3>',
));
}
这段代码是我从tweentyten主题中抄袭和稍加修改过来的,你可以将这段代码拷贝到你的functions.php中,进入后台看看是否已经激活了不少功能。
接下来的工作就是要添加新的函数了,用新的函数来实现很多新的wordpress系统没有的功能。由于wordpress模板开发是一个巨大的工程,无法用一篇文章讲完,因此,本文只是稍加点讲,无法深入,你可以看其他文章,以获取新的信息。
五、构建完整的模板体系 ↑
通过上文的讲解加上你坚持不懈的学习,应该对wordpress模板的初浅知识有了较为深刻的体会。接下来你就将拥有一个庞大复杂但逻辑合理成系统体系的模板了。
我们利用之前制作好的index.php文件将其分割,将我所指的头部全部剪切到一个新的header.php文件中,置于mytheme下,在index.php被剪切的地方用<?php get_header(); ?>代替,将<div container>全部剪切到新的loop.php中用<?php get_template_part('loop','index'); ?>代替,将尾部全部剪切到footer.php中用<?php get_footer(); ?>代替。这样一来你就发现你的index.php只留下了三条php语句了,在运行你的博客试试,是否跟刚才的效果一模一样呢?再将loop.php中的<div right>剪切到sidebar.php中用<?php get_sidebar(); ?>代替。这下是不是觉得你的主题文件夹内就丰富了好多。
新建一个category.php,将index.php中的内容拷贝过来,修改<?php get_template_part('loop','index'); ?>为<?php get_template_part('loop','category'); ?>,新建一个loop-category.php并在里面编写分类页想要呈现的表现形式。
按照这个思路,很快你的模板文件就会有很多,而且随着你对模板文件之间调用关系的理解,很快可以自由编写文件了。
六、总结 ↑
编写wordpress模板是一个比较繁杂的过程,对于初学者是很难一下获得成功的,只有慢慢学习和敢于挑战才能获取成功。wordpress模板的关键主要体现在:
1、模板样式:模板的外观决定了模板的成败,一个好的模板首先体现在另读者很舒服的外观上,而作为程序员,往往被设计难倒;要向拥有令人眼前一亮的wordpress模板,学好设计和css是必不可少的网编基础。
2、模板功能:模板的功能是体现模板开发者水平的衡量标准,一个功能丰富的模板,能给用户一种权威的感觉,无论是个人站还是企业站,华丽的网站功能让用户觉得站长是用心做站的人。
3、模板的设计理念:开发者根据自己的目标设计符合自身需要的模板,不盲目追求,不刻意回避,而是以需求为目标,以用户体验为设计动力。
因此,其实开发wordpress到后期问题不是在wordpress模板的代码逻辑和函数编写上,而是在于天才的开发思路和高雅的审美观念上。
相关文章:
wordpress模板文件结构超详解
wordpress网站建设中,主题的制作是最为核心的环节。了解模板文件结构是模板制作的第一步,本文所讲的模板文件结构包括两部分,一是指以文件名为概念的文件结构,二是指文件内容的代码结构。 一、如何使模板文件起作用 ↑ wordpres…...
BFS 走迷宫
#include<bits/stdc.h> using namespace std; int a[100][100],v[100][100];//访问数组 n,m<100 struct point {int x;int y;int step; }; queue<point> r;//申请队列 int dx[4]{0,1,0,-1};//四个方向 右下左上 int dy[4]{1,0,-1,0}; int main() { /* 5 4 1 …...
尚硅谷爬虫note005
一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...
mysql中general_log日志详解
介绍 1.记录范围:这个log里面会记录MySQL所有的SQL语句,不管是查询语句,还是DML语句,还是DDL语句,还是DCL语句,这些语句统统都会被记录在general log文件中。就连我们连接和断开MySQL数据库的这些语句。 2…...
计算机毕业设计SpringBoot+Vue.js医院住院管理系统(源码+lw文档+PPT+讲解视频)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
MongoDB 7 分片副本集升级方案详解(下)
#作者:任少近 文章目录 1.4 分片升级1.5 升级shard11.6 升级shard2,shard31.7 升级mongos1.8重新启用负载均衡器1.9 推荐MongoDB Compass来验证数据 2 注意事项: 1.4 分片升级 使用“滚动”升级从 MongoDB 7.0 升级到 8.0,即在其他成员可用…...
AI技术未来趋势
AI技术未来趋势 目录 AI技术未来趋势第一,AGI(通用人工智能)发展步伐在放慢;第二,ChatGPT等问答式AI已接近极限,复杂推理的“慢思考”模式成为新方向;第三,除了少数科技巨头,大多数公司都专注于做专业大模型第四,模型越做越小,进入轻量化时代第五,高质量数据、合成数据使模型知…...
vue 文件下载(导出)excel的方法
目前有一个到处功能的需求,这是我用过DeepSeek生成的导出(下载)excel的一个方法。 1.excel的文件名是后端生成的,放在了响应头那里。 2.这里也可以自己制定文件名。 3.axios用的是原生的axios,不要用处理过的ÿ…...
Flask和Django相比哪个更适合新手?
Flask 与 Django:哪个更适合新手? 对于新手来说,选择 Flask 还是 Django 主要取决于你的具体需求和项目复杂度。以下是两者的详细对比,帮助你做出选择: 1. Flask 优点 简单易用:Flask 是一个轻量级的微框架,代码简洁,易于理解和上手。适合初学者快速入门。灵活性高:…...
【含开题报告+文档+PPT+源码】基于spring boot的固定资产管理系统
开题报告 本研究论文提出了一种基于SpringBoot框架构建的全面且高效的固定资产管理系统,旨在优化企业内部的固定资产全生命周期管理流程。该系统集成了员工权限管理、业务流程处理及数据分析于一体,实现了员工便捷的登录注册功能,并通过安全…...
Unity嵌入到Winform
Unity嵌入到Winform Winform工程🌈...
Svelte 最新中文文档翻译(8)—— @html、@const、@debug 模板语法
前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1: Svelte 以其独特的编…...
Qt Designer菜鸟使用教程(实现一个本地英文翻译软件)
1 安装Qt Designer 安装这个包的时候会自带安装 Qt Designer, 安装目录为python的安装根目录的 Lib/site-packages/qt5_applications/Qt/bin 目录下。 pip install pyqt5-tools2 新建窗体 2.1 新建主窗体 创建之后如下图: 设置主窗口大小: 设置窗…...
CPT205 计算机图形学 OpenGL 3D实践(CW2)
文章目录 1. 介绍2. 设计3. 准备阶段4. 角色构建5. 场景构建6. 交互部分6.1 键盘交互6.2 鼠标交互6.3 鼠标点击出多级菜单进行交互 7. 缺点与问题7.1 程序bug7.2 游戏乐趣不足7.3 画面不够好看 8. 完整代码 1. 介绍 前面已经分享过了关于CPT205的CW1的2D作业,这次C…...
【网络安全 | 漏洞挖掘】跨子域账户合并导致的账户劫持与删除
未经许可,不得转载。 文章目录 概述正文漏洞成因概述 在对目标系统进行安全测试时,发现其运行着两个独立的域名——一个用于司机用户,一个用于开发者/企业用户。表面上看,这两个域名各自独立管理账户,但测试表明它们在处理电子邮件变更时存在严重的逻辑漏洞。该漏洞允许攻…...
利用蓝耘智算平台深度搭建deepseek R1模型,进行深度机器学习
大佬请阅读 前言关于DeepSeek 的显著优点卓越的性能表现低廉的训练成本广泛的应用场景开放的开源策略 DeepSeek 与其他 AI 对比什么是蓝耘智算平台为什么使用蓝耘智算平台搭建我们的deepseek如何使用蓝耘 GPU 智算云平台搭建我们的R1模型并成功进行调用测试11. AVL树节点结构2.…...
传输层协议TCP (上)
文章目录 前言TCP报文格式TCP连接管理连接建立与中止三次握手三次握手的状态变化为什么是三次握手 四次挥手四次挥手的状态变化FIN_WAIT_2 状态可能导致连接长时间不释放的问题TIME_WAIT状态作用 复位报文段非法连接请求其他异常情况 半打开连接同时握手同时关闭 参考资料 前言…...
深度学习框架探秘|Keras:深度学习的魔法钥匙
一、引言:深度学习浪潮中的 Keras 前面的文章我们探秘了深度学习框架中的两大明星框架 —— TensorFlow 和 PyTorch 以及 两大框架的对比 在深度学习的众多框架中,还有一款框架备受开发者们的喜爱 —— Keras 。它就像是一位贴心的助手,为我…...
使用爬虫获取1688商品分类:实战案例指南
在电商领域,获取商品分类信息对于市场分析、选品决策和竞争情报收集至关重要。1688作为国内领先的B2B电商平台,提供了丰富的商品分类数据。通过爬虫技术,我们可以高效地获取这些分类信息,为商业决策提供有力支持。 一、为什么选择…...
MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)
目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...
【k8s应用管理】kubernetes lngress资源管理
文章目录 补充**Service 的作用****Kubernetes 外部访问方案** Kubernetes IngressIngress 概述Kubernetes 外部访问方案对比Ingress 的组成**Ingress-Nginx 工作原理**Ingress 控制器的部署方式1. DaemonSet Host 网络模式2. Deployment NodePort/LoadBalancer Service 创建…...
2.11学习
misc buu-荷兰宽带泄露 下载附件得到了一个后缀为.bin的文件 是宽带数据文件,用RouterPassView工具进行查看。大多数现代路由器都可以让您备份一个文件路由器的配置文件,然后在需要的时候从文件中恢复配置。路由器的备份文件通常包含了像您的ISP的用户…...
Python 调用 DeepSeek API 案例详细教程
本案例为以 Python 为例的调用 DeepSeek API 的小白入门级详细教程 步骤 先注册并登录 DeepSeek 官网:https://www.deepseek.com/ 手机号验证码注册或登录即可 创建 API KEY 注意保存,写代码时必须提供的 打开 Pycharm 创建工程 并安装 OpenAI 库编写代…...
C++ Primer 函数基础
欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…...
qt QPlainTextEdit总结
QPlainTextEdit 概述 用途:专为处理纯文本设计,适合大文本编辑和简单文本显示(如日志、代码编辑器)。 特点:相比QTextEdit,轻量高效,支持快速加载和滚动大文件,默认不支持富文本。 …...
【SVN基础】
软件:ToritoiseSVN 代码版本回退:回退到上一个版本 问题:SVN版本已经提交了版本1和版本2,现在发现不需要版本2的内容,需要回退到版本1然后继续开发。 如图SVN版本已经提交到了107版本,那么本地仓库也已经…...
kron积计算mask类别矩阵
文章目录 1. 生成类别矩阵如下2. pytorch 代码3. 循环移动矩阵 1. 生成类别矩阵如下 2. pytorch 代码 import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0…...
【前端】【vue】vue2/3,nuxt的插槽使用详解
插槽在Vue2、Vue3和不同版本Nuxt中的使用 Vue2中的插槽 基础插槽 在Vue2中,基础插槽允许在组件的模板中定义一个占位符,然后在使用组件时插入自定义内容。例如,创建一个简单的MyBox组件: <template><div class"…...
Stable Diffusion 安装教程(附安装包) 【SD三种安装方式,Win+Mac一篇文章讲明白】
“Stable Diffusion的门槛过高、不会安装?没关系,这篇文章教会你如何安装!” Stable Diffusion的安装部署其实并不困难,只需简单点击几下,几分钟就能安装好,不管是windows还是苹果mac电脑,关于…...
网络安全用centos干嘛 网络安全需要学linux吗
网络安全为啥要学Linux系统,据不完全统计,Linux系统在数据中心操作系统上的份额高达70%。它一般运行于服务器和超级计算机上。 所以我们日常访问的网站后台和app后端都是部署在Linux服务器上的,如果你不会Linux系统操作,那么很多…...
