天天看点

2019.2.19 关于wordpress主题开发

看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

  1. 实例
<?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();
           

帮助理解循环过程的一张图

2019.2.19 关于wordpress主题开发

关于模板

  • 一个简单的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/