今天看到WordPress中的可以自定义页面模板,很好奇在添加页面时,这些页面模板的选项从哪里来的?

首先找到Post.php,竟然没有找到这区域是在post.php的那个函数内输出的,后来通过查找输出页面Html代码,找到了输出位置是在wp-admin/includes/meta-boxes.php的“page_attributes_meta_box”方法中。

page_attributes_meta_box方法就是用来显示页面属性,它被“edit-form-advanced.php”页面所调用,使用的语句是:

?
1
add_meta_box( 'pageparentdiv' , 'page' == $post_type ? __( 'Page Attributes' ) : __( 'Attributes' ), 'page_attributes_meta_box' , $post_type , 'side' , 'core' );
?
1
通过add_meta_box来调用了“page_attributes_meta_box”。
?
1
meta-boxes.php是一个插件,是在<span style= "font-family: 宋体;" face= "宋体" >”wp-admin\edit-form-advanced.php”通过 require_once ( './includes/meta-boxes.php' );引入到程序中的。而”wp-admin\edit-from-advanced.php”也是通过</span>
?
1
require_once 被包含在post.php中。他们的关系如下图:
?
1
<a href= "http://images.cnblogs.com/cnblogs_com/TransTown/201105/20110502014502409.jpg" ><img src= "http://images.cnblogs.com/cnblogs_com/TransTown/201105/201105020145026788.jpg" alt= "1" title= "1" style= "background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" border= "0" height= "92" width= "689" ></a>
?
1
  

在meta-boxes.php中,使用了page_template_dropdown方法来输出select的内容。

?
1
2
3
4
<select name= "page_template" id= "page_template" >
<option value= 'default' ><?php _e( 'Default Template' ); ?></option>
<?php page_template_dropdown( $template ); ?>
</select>

?
1
在文件”wp-admin/includes/template.php "中找到了这个方法,而在wp-admin\includes\admin.php" : require_once (ABSPATH . 'wp-admin/includes/template.php' );中引入了
?
1
template.php这个文件到wordpress中。
?
1
在template.php中,page_template_dropdown方法主要是通过”get_page_templates“方法获取到option的值。get_page_templates是来自于”wp-admin/includes/theme.php”文件的。
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function get_page_templates() {
     <span style= "color: #ff0000;" color= "#ff0000" > $themes = get_themes();
     $theme = get_current_theme();</span>
     $templates = $themes [ $theme ][ 'Template Files' ];
     $page_templates = array ();
     if ( is_array ( $templates ) ) {
         $base = array ( trailingslashit(get_template_directory()), trailingslashit(get_stylesheet_directory()) );
         
         foreach ( $templates as $template ) {
             $basename = str_replace ( $base , '' , $template ); 
             // don't allow template files in subdirectories
             if ( false !== strpos ( $basename , '/' ) )
                 continue ;
             $template_data = implode( '' , file( $template ));
             $name = '' ;
             <span style= "color: #0000ff;" color= "#0000ff" > if ( preg_match( '|Template Name:(.*)$|mi' , $template_data , $name ) )
                 $name = _cleanup_header_comment( $name [1]);</span>
             if ( ! empty ( $name ) ) {
                 $page_templates [trim( $name )] = $basename ;
             }
         }
     }
     //print_r($page_templates);
    // die();
     return $page_templates ;
}

在这个方法中,首先通过get_themes方法获取所有的模板,然后再通过get_current_theme()获取到当前的模板保存信息。通过输出$theme的内容,我们获取的是一个所有模板的目录列表。wordpress是通过什么来确定哪个模板是页面模板?

通过”$template_data = implode( '', file( $template )); “方法来获取模板的内容。然后通过正则匹配有在模板内容中指定”Template Name“的模板,获取的模板名后,这个模板就是页面模板。我们可以打开wordpress默认自带的模板”onecolumn-page.php“在这个模板的注释部分可以看到” * Template Name: One column, no sidebar“我们如果需要给wordpress增加新的页面模板的话,就需要在模板中带上Template Name这个注释,wordpress就自动会把这个模板识别成页面模板。下图为获取模板值部分的关系图:

Tips

可以通过在wp-config.php中把define('WP_DEBUG', false);设置为true,就可以通过print_r和die来逐步输出我们需要查看的内容。

WordPress代码和分析-页面模板是从哪里来的相关推荐

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

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

  2. .NET 11 个 Visual Studio 代码性能分析工具

    原文地址 软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行 ...

  3. 11个Visual Studio代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  4. Blueprint代码详细分析-Android10.0编译系统(七)

    摘要:Blueprint解析Android.bp到ninja的代码流程时如何走的? 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Andro ...

  5. Rust 阴阳谜题,及纯基于代码的分析与化简

    Rust 阴阳谜题,及纯基于代码的分析与化简 雾雨魔法店专栏 https://zhuanlan.zhihu.com/marisa 来源 https://zhuanlan.zhihu.com/p/522 ...

  6. 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研

    想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...

  7. 【代码审计】使用SonarQube进行代码质量分析管理

    2019独角兽企业重金招聘Python工程师标准>>> 在之前的开发中,代码的工作量化和质量化都是一个问题,随着近几年互联网行业的快速发展,代码已经可以来工作量化和质量化,今天我们来 ...

  8. 11 个 Visual Studio 代码性能分析工具

    软件开发中的性能优化对程序员来说是一个非常重要的问题.一个小问题可能成为一个大的系统的瓶颈.但是对于程序员来说,通过自身去优化代码是十分困难的.幸运的是,有一些非常棒的工具可以帮助程序员进行代码分析和 ...

  9. NET Core的代码安全分析工具 - Security Code Scan

    NET Core的代码安全分析工具 - Security Code Scan 原文:NET Core的代码安全分析工具 - Security Code Scan NET Core的代码安全分析工具 - ...

最新文章

  1. 虚拟串口工具_com0com
  2. 【转】Nginx系列(五)--nginx+tomcat实现负载均衡
  3. AI换脸引发全民恐慌,用对方向却能推动行业变革
  4. 论文浅尝 - CVPR2020 | 基于网格特征的可视问答系统
  5. [Matlab]求解线性方程组
  6. MVC 使用Jquery实现AJax
  7. python阈值计算_python – 在numpy中计算超过阈值的数组值的最快方法
  8. 播放视频时有残影、水纹的原因
  9. intellij HTTP状态 404 - 未找到_IntelliJ静态分析竟有代码检测优化,删除冗余等功能...
  10. 【Python】python帮助文档
  11. 上海航芯 | 智能网联汽车终端T-BOX应用方案
  12. ctc系统数据库服务器采用,CTC系统构成
  13. 计算机应用基础统考试题及答案题库,2.Windows知识题部分--计算机应用基础统考试题库及答案...
  14. Pathon 连接数据库
  15. 快递电子面单批量打印接口对接demo-JAVA
  16. 风华是一指流砂,苍老了一段过往年华
  17. 二阶无源低通滤波器的截止频率与RC关系
  18. HTML5前端开发入门之网易注册界面实战
  19. C. Oranges and Apples
  20. unescape解密 php,[PHP]php中escape函数加密与JS中unescape解密

热门文章

  1. Vue3.0 300个实用小工具
  2. webbuilder8开发经验(二)
  3. 强化学习Gym Atari报错缺少ale_c.dll
  4. 八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘
  5. BufferedReader和scanner用法和区别
  6. 如何评价苹果12月8日公布的AirPods Max头戴式耳机?
  7. 那天看了《纳尼亚传奇-狮子女巫衣橱》= 。=
  8. 如和学习java并发编程
  9. Mac风扇声音大的原因以及如何解决
  10. Science综述:利用根际微生物组提高作物抗旱和产量