您现在的位置是:首页 > cms教程 > WordPress教程WordPress教程
wordpress模板机制分析介绍
秋翠2025-03-25WordPress教程已有人查阅
导读我们以一个简单的模板为例子,继续说说wordpress的模板机制,看看做一个自己的模板需要哪些知识点。页面模板渲染wordpress的模板位于wp-content/themes目录下,wordpress可以自
我们以一个简单的模板为例子,继续说说wordpress的模板机制,看看做一个自己的模板需要哪些知识点。页面模板渲染wordpress的模板位于wp-content/themes目录下,wordpress可以自动加载新增的模板目录。通过上一节的简单介绍,知道wordpress默认打开时会查找home.php或者index.php。我们先看看wordpress自带的模板twentyfifteen的index.php页面。
除了加载模板的php文件,index.php中还调用了wordpress中定义的一些函数,下面我们看看这些函数是 干什么的。
$GLOBALS['wp_query'] = new WP_Query();
在wp-setting.php中执行。该对象的have_posts()返回当前的url查询罗辑下是否还是需要显示的post。
the_post()将全局的$post对象设置为下一个选择的post。
the_ID(): echo当前post的id
上面主要说了在获取数据后,如何用数据拼接成一个完整的页面。继续来看看数据是如何获取的。
wordpress在query.php文件中定以了一个WP_Query类,这个类负责对GET和POST请求的参数进行解析,维护在一个页面显示周期里所需要的数据读取。封装了基本的数据读取工作。
主要的数据读取在WP_Query的 get_posts()函数中,该函数有一千多行,主要就是利用$wpdb从数据库读取数据,封装到对应的POST对象中。get_posts()函数可能在 在WP_Query构造时调用,主要依赖于是否传入了查询字符串。
WP类的main函数是调用页面数据的入口。其中会建立查询字符串,然后调用上面的query函数来检索相应的post。打开首页是传入的查询字符串对象为空。
函数get_posts中会按照查询参数,拼接处要使用的sql语句,代码很长,杂,逻辑比较多。拼好字符串后,在用$wpdb这个wpdb类实例(wp-db.php文件中)来进行数据库操作。这个类中封装了读取mysql的代码。
<?php
get_header(); ?>
<div id="primary" class="content-area">
<div id="content" class="site-content" role="main">
<?php if ( have_posts() ) : ?>
<?php /* The loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', get_post_format() ); ?>
<?php endwhile; ?>
<?php twentythirteen_paging_nav(); ?>
<?php else : ?>
<?php get_template_part( 'content', 'none' ); ?>
<?php endif; ?>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
这个index.php里的代码很简单,只描述了怎么去展示首页的逻辑。代码中有get_header(), get_sidebar(), get_footer()三个加载函数,分别加载页面的头部,尾部和侧边栏。一般来说,网站的这三个部分是公用的,所以wordpress抽象了三个函数,来实现代码的重用。以 get_sidebar()的代码为例,看看是如何加载页面的不同部分的。
function get_sidebar( $name = null ) {
/**
* Fires before the sidebar template file is loaded.
*
* The hook allows a specific sidebar template file to be used in place of the
* default sidebar template file. If your file is called sidebar-new.php,
* you would specify the filename in the hook as get_sidebar( 'new' ).
*
* @since 2.2.0
* @since 2.8.0 $name parameter added.
*
* @param string $name Name of the specific sidebar file to use.
*/
do_action( 'get_sidebar', $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "sidebar-{$name}.php";
$templates[] = 'sidebar.php';
// Backward compat code will be removed in a future release
if ('' == locate_template($templates, true))
load_template( ABSPATH . WPINC . '/theme-compat/sidebar.php');
}
这个函数默认加载的是sidebar.php文件,也可以传入不同的$name,来加载sidebar-{$name}.php类型的php文件,实现不同的页面可以load不同的侧边栏,头部和尾部的代码与侧边栏的代码类似。wordpress中模板的php文件加载均采用了类似的罗辑。除了加载模板的php文件,index.php中还调用了wordpress中定义的一些函数,下面我们看看这些函数是 干什么的。
function have_posts() {
global $wp_query;
return $wp_query->have_posts();
}
$wp_query是在初始化时创建的WP_Query对象;$GLOBALS['wp_query'] = new WP_Query();
在wp-setting.php中执行。该对象的have_posts()返回当前的url查询罗辑下是否还是需要显示的post。
the_post()将全局的$post对象设置为下一个选择的post。
function get_template_part( $slug, $name = null ) {
/**
* Fires before the specified template part file is loaded.
*
* The dynamic portion of the hook name, `$slug`, refers to the slug name
* for the generic template part.
*
* @since 3.0.0
*
* @param string $slug The slug name for the generic template.
* @param string $name The name of the specialized template.
*/
do_action( "get_template_part_{$slug}", $slug, $name );
$templates = array();
$name = (string) $name;
if ( '' !== $name )
$templates[] = "{$slug}-{$name}.php";
$templates[] = "{$slug}.php";
locate_template($templates, true, false);
}
上面的代码是一个通用的加载模板php文件的函数,类似于get_header,但是比他们更通用。通过槽位和name的限定,来实现更灵活的加载模板。
get_template_part( 'content', get_post_format() );
上面这行代码会加载 content.php模板文件,其中包含了一个post显示的html代码
<?php
/** * The default template for displaying content * * Used for both single and index/archive/search. * * @package WordPress * @subpackage Twenty_Thirteen * @since Twenty Thirteen 1.0 */?><article id="post-<?php the_ID(); ?>" <?php post_class(); ?>> <header class="entry-header"> <?php if ( has_post_thumbnail() && ! post_password_required() && ! is_attachment() ) : ?> <div class="entry-thumbnail"> <?php the_post_thumbnail(); ?> </div> <?php endif; ?> <?php if ( is_single() ) : ?> <h1 class="entry-title"><?php the_title(); ?></h1> <?php else : ?> <h1 class="entry-title"> <a href="<?php the_permalink(); ?>" rel="bookmark"><?php the_title(); ?></a> </h1> <?php endif; // is_single() ?> <div class="entry-meta"> <?php twentythirteen_entry_meta(); ?> <?php edit_post_link( __( 'Edit', 'twentythirteen' ), '<span class="edit-link">', '</span>' ); ?> </div><!-- .entry-meta --> </header><!-- .entry-header --> <?php if ( is_search() ) : // Only display Excerpts for Search ?> <div class="entry-summary"> <?php the_excerpt(); ?> </div><!-- .entry-summary --> <?php else : ?> <div class="entry-content"> <?php /* translators: %s: Name of current post */ the_content( sprintf( __( 'Continue reading %s <span class="meta-nav">→</span>', 'twentythirteen' ), the_title( '<span class="screen-reader-text">', '</span>', false ) ) ); wp_link_pages( array( 'before' => '<div class="page-links"><span class="page-links-title">' . __( 'Pages:', 'twentythirteen' ) . '</span>', 'after' => '</div>', 'link_before' => '<span>', 'link_after' => '</span>' ) ); ?> </div><!-- .entry-content --> <?php endif; ?> <footer class="entry-meta"> <?php if ( comments_open() && ! is_single() ) : ?> <div class="comments-link"> <?php comments_popup_link( '<span class="leave-reply">' . __( 'Leave a comment', 'twentythirteen' ) . '</span>', __( 'One comment so far', 'twentythirteen' ), __( 'View all % comments', 'twentythirteen' ) ); ?> </div><!-- .comments-link --> <?php endif; // comments_open() ?> <?php if ( is_single() && get_the_author_meta( 'description' ) && is_multi_author() ) : ?> <?php get_template_part( 'author-bio' ); ?> <?php endif; ?> </footer><!-- .entry-meta --></article><!-- #post -->
content.php是页面里一个post的显示模板,排版什么的我们先不关心, 看看里面用到的wordpress的函数。这些函数主要在post-template.php中the_ID(): echo当前post的id
post_class(): Display the classes for the post div.
the_title: Display or retrieve the current post title with optional content.
the_permalink():Display the permalink for the current post.
the_excerpt():Display the post excerpt.
the_content(): Display the post content.
只列出了几个要紧的函数,wordpress就是通过这些一个个的代码片段,最终拼接出一个完整的显示页面。页面的数据获取上面主要说了在获取数据后,如何用数据拼接成一个完整的页面。继续来看看数据是如何获取的。
wordpress在query.php文件中定以了一个WP_Query类,这个类负责对GET和POST请求的参数进行解析,维护在一个页面显示周期里所需要的数据读取。封装了基本的数据读取工作。
主要的数据读取在WP_Query的 get_posts()函数中,该函数有一千多行,主要就是利用$wpdb从数据库读取数据,封装到对应的POST对象中。get_posts()函数可能在 在WP_Query构造时调用,主要依赖于是否传入了查询字符串。
public function __construct($query = '') {
if ( ! empty($query) ) {
$this->query($query);
}
}
public function query( $query ) {
$this->init();
$this->query = $this->query_vars = wp_parse_args( $query );
return $this->get_posts();
}
WP_Query的 init函数主要建立一个干净的变量环境。get_posts函数中有大量的各种参数的解析罗辑。WP类的main函数是调用页面数据的入口。其中会建立查询字符串,然后调用上面的query函数来检索相应的post。打开首页是传入的查询字符串对象为空。
函数get_posts中会按照查询参数,拼接处要使用的sql语句,代码很长,杂,逻辑比较多。拼好字符串后,在用$wpdb这个wpdb类实例(wp-db.php文件中)来进行数据库操作。这个类中封装了读取mysql的代码。
本文标签:
很赞哦! ()
下一篇:wordpress配置步骤教程
相关教程
图文教程
wordpress数据库结构和表结构说明
数据表结构:wp_commentmeta:存储评论的元数据wp_comments:存储评论wp_links:存储友情链接(Blogroll)wp_options:存储WordPress系统选项和插件、主题配置wp_postmeta:存储文章(包
wordpress网站为图片添加水印的方法
wordpress网站如何为图片添加水印:1、打开你的wordpress网站后台,并登陆。点击插件-安装插件,进入安装搜索界面
Ubuntu安装nginx, MySQL, PHP (LEMP),phpmyadmin,WordPress的方
0)更新 Apt-Get终端命令:sudo apt-get update1) 安装phpsudo apt-get install php52)安装MySql终端命令: sudo apt-get install mysql-server php5-mysql3)安装Nginx
WordPress怎么引入css/js的方法
WordPress引入css/js 是我们制作主题时首先面对的一个难点,任何一款主题都要加载自己的css,js,甚至很有可能还需要加载Jquery文件,网上方法特多,说法不一,我们今天借鉴wordpres
相关源码
-
(自适应)行业协会工会机构单位pbootcms网站源码本模板基于PbootCMS内核开发,为行业协会、工会组织及机构单位量身打造。采用响应式布局设计,可自动适配手机、平板等移动设备,数据实时同步更新。模板包含行业资讯查看源码 -
响应式粉色美容整形化妆品pbootcms网站模板开源源码该网站模板为美容整形、化妆品企业设计,采用响应式布局确保在手机、平板及PC端自动适配显示效果。基于PbootCMS内核开发,支持一键替换图文内容快速转换至其他行业应用。查看源码 -
(PC+WAP)红色户外岗亭钢结构岗亭pbootcms网站模板为钢结构岗亭、户外设施企业打造的高端响应式营销门户,基于PbootCMS开源内核深度开发,采用HTML5自适应架构,实现PC与移动端数据实时同步展示。查看源码 -
(自适应多语言)WordPress开源主题MirageV资讯个人博客源码MirageV资讯类个人博客主题源码/WordPress主题/全开源MirageV 是一款开源的 WordPress 主题,支持自适应、暗黑模式、多语言等功能,查看源码 -
(自适应响应式)绿色环保材料设备科技类营销型网站pbootcms源码下载本模板基于PbootCMS开发,主要面向环保设备、环保材料及相关科技企业。采用HTML5+CSS3技术构建,具备响应式特性,确保在各类设备上均有良好展示效果。查看源码 -
pbootcms模板(PC+WAP)传媒广告影视公司网站源码基于PbootCMS内核开发的全自适应传媒文化网站模板,为影视公司、广告传媒企业打造,同时支持多行业快速适配。通过替换文字图片即可转换为其他行业网站查看源码
| 分享笔记 (共有 篇笔记) |

