看WordPress的官网的主题开发资料总结
循环loop
- Loop是WordPress用来显示帖子的PHP代码,使用The Loop,WordPress会处理每个帖子以显示在当前页面上
- 循环的概念
循环是面向对象和全局变量的组合
循环的两个重要全局变量是:
$ wp_query,它是类WP_Query的一个对象,持有一个WP数据库查询结果,其中$ wp_query-> posts,一个单独的WP_Post数组。
$ post是 WP_Post类的当前对象
查看WP_Post类的时候,post对象就是储存在数据库里的post日志对象,对象的参数就是数据库的元素:
关于wp_post对象的详细参数:https://codex.wordpress.org/Class_Reference/WP_Post#Member_Variables_of_WP_Post
PS:
默认情况下,所有模板标签都依赖于$ post全局变量,并且$ post全局变量由_post()设置/修改,后者从$ wp_query全局变量获取其数据。$ post也由WP_Query :: the_post()设置/修改,如在辅助循环中使用的那样。
- 使用循环(全部显示):
请务必在主题模板的顶部包含对标题模板的调用。如果您在自己的设计中使用The Loop(并且您自己的设计不是模板),请将WP_USE_THEMES设置为false:
<?php define('WP_USE_THEMES',false); get_header(); ?>
在主页模板中输入:
<?php if(have_posts()) :while (have_posts()) :the_post();?>
//只显示日志的标题
<?php the_title()?>
<?php endwhile;?>
<?php endif;?>
- 使用循环从某些类别中排除帖子(选择显示)
排除了类别3和8的帖子:直接使用内部查询函数,修改查询参数,对查询本身做出修改:
//直接声明查询类WP_Query的对象,并初始化对象,排除3、8类别
<?php $ query = new WP_Query('cat = -3,-8'); ?>
<?php if($ query-> have_posts()):while($ query-> have_posts()):$ query-> the_post(); ?>
<?php th_title()?>
<?php the_content(); ?>
<?php endwhile?>
<?php endif; ?>
PS:WordPress将排除类别3和类别8中的所有帖子,即使在查看类别存档时!
多重循环Multiple Loops
- 实例
<?php rewind_posts(); ?>
<?php while(have_posts()):the_post(); ?>
<! - ...... - >
<?php endwhile; ?>
或者
//获取special_cat类别中的最后10篇帖子。
<?php query_posts('category_name = special_cat&posts_per_page = 10'); ?>
<?php while(have_posts()):the_post(); ?>
<! - ...... - >
<?php endwhile; ?>
嵌套循环(不太理解)
eg:
$ my_query = new WP_Query('cat = 3');
if($ my_query-> have_posts()){
while($ my_query-> have_posts()){
$ my_query-> the_post();
内容();
}
}
wp_reset_postdata();
帮助理解循环过程的一张图
关于模板
- 一个简单的WordPress网页由三个部分组成:头部结构、内容结构、底部结构。这些结构都是由你当前使用的WordPress主题模板文件生成的。
- 基本模板文件index.php是开始文件。这个文件有两个主要功能:
包含或者调用其它模板文件;
包含WordPress主循环以从数据库获取信息(日志、页面、分类等等信息)。 - 网页中的内容是由各个模板文件在后台生成的。主题文件和样式表存储在一起就成为了一个WordPress主题(如header.php 、footer.php、searchform.php等模板文件)
ps:像header.php 这样WordPress的标准模板文件,导入的时候直接使用WordPress的内部函数get_header(); 像sidebar.php自定义的模板文件需要使用PHP的include(‘src’)将外部代码包含进来(或者使用include_once()一次调用外部代码) - 特殊模板:single.php、page.php、archive.php模板文件
URL的寻找规则:
例如,当用户点击日志标题的时候,WordPress会认为用户希望在单独日志页面上打开文档。于是WordPress的模板分级模式会优先使用single.php模板文件生成页面(如果你的主题里有single.php的话),而不是使用index.php模板文件生成。同样,如果用户点击了特别分类的链接,WordPress将使用category.php模板文件来显示,如果这个模板文件不存在,WordPress将寻找archive.php模板文件,如果这个模板文件也不存在,WordPress将使用主模板index.php来显示页面。
自己通过设置page.php页面,当访问某个页面的URL的时候,WordPress会优先加载page.php的页面而不是index的页面,如果使用搜索博客,放回的页面是会将结果放回加载到search.php页面中,还在研究看关于模板层次结构的跳转的问题
关于模板层次结构:https://developer.wordpress.org/themes/basics/template-hierarchy/