走进wordpress 详细说说template-loader.php

走进wordpress 详细说说template-loader.php,第1张

概述再看template-laoder.php,这个文件总共只有45行。它的作用是基于访问的URL装载正确的模板.文件第六行,也是第一条语句,如下:if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) do_action('template_redirect');首先判断是否使用Themes,这个WP_USE_THEMES常量在index.php中第一句就被设置为true。因此条件成立,会执行do_action(‘template_redirect’)语句。do_action('template_redirect')都做了什么?wordpress默认的有如下:‘template_redirect’的Action(动作)在include下的文件中出现。除了这里的do_action外,还有其他三个文 件中:default-filters.php,和ms-default-filters.php中以及canonical.php中出现。不包括wp- content目录下面出现的。canonical.php (411行):  add_action(‘template_redirect’, ‘redirect_canonical’);default-filters.php(200行): add_action( ‘template_redirect’,   ‘wp_shortlink_header’,11, 0 );default-filters.php(243行):  add_action( ‘template_redirect’, ‘wp_old_slug_redirect’);ms-default-filters.php(32行):  add_action( ‘template_redirect’, ‘maybe_redirect_404′ );ms-functions.php(1353行):  add_action( ‘template_redirect’, ‘redirect_mu_dashboard’ );default-filters.php文件设置了wordpress大部分默认的filter和action。文件内容都是诸如下面的形式。add_action( ‘xxx’,'xxxx’);ms-default-filters.php是多站点时候设置的,内容类似default-filters.php。wordpress默认情况下没有开启多站点。如果需要开启,请按照wordpress的指导文件 *** 作。add_action( 'template_redirect', 'wp_shortlink_header',11, 0)wp_shortlink_header位于文件link-template.php 2230行。 作用是如果当前页面定义了短连接,就在header中发送个短链接.形容: <link rel='shortlink' href='http://localhost/?p=1234' /> 这样的缩短网址。add_action( 'template_redirect', 'wp_old_slug_redirect');wp_old_slug_redirect() 在query.php2807行,slug是什么?slug是url的一部分。在wordpress后台的永久链接设置(/wp-admin /options-permalink.php)里,用户可以自定义链接格式。绝大多数自定义的用户喜欢在url中包含由文章标题生成的一串字符,这一串 字符就是post slug。这个函数功能是重定向old slug到正确的链接。接下来是个判断语句;// Process feeds and trackbacks even if not using themes. if ( is_robots() ) : do_action('do_robots'); return; elseif ( is_feed() ) : do_feed(); return; elseif ( is_trackback() ) : include( ABSPATH . 'wp-trackback.php' ); return; endif; is_robots函数判断当前查询是否是robot。位于query.php491行。do_robots函数位于functions.php1779行。作用:显示robot.txt的内容。 然后是个大的if语句:if ( defined('WP_USE_THEMES') && WP_USE_THEMES ) : $template = false; if ( is_404() && $template = get_404_template() ) : elseif ( is_search() && $template = get_search_template()) : elseif ( is_tax() && $template = get_taxonomy_template()) : elseif ( is_front_page() && $template = get_front_page_template()) : elseif ( is_home() && $template = get_home_template()) : elseif ( is_attachment() && $template = get_attachment_template()) : remove_filter('the_content', 'prepend_attachment'); elseif ( is_single() && $template = get_single_template()) : elseif ( is_page() && $template = get_page_template()) : elseif ( is_category() && $template = get_category_template()) : elseif ( is_tag()&& $template = get_tag_template()) : elseif ( is_author()&& $template = get_author_template()) : elseif ( is_date()&& $template = get_date_template()) : elseif ( is_archive()&& $template = get_archive_template()) : elseif ( is_comments_popup() && $template = get_comments_popup_template() ) : elseif ( is_paged()&& $template = get_paged_template() ) : else : $template = get_index_template(); endif; if ( $template = apply_filters( 'template_include', $template ) ) include( $template ); return; endif;这个大if语句中形如get_xxxx_template()的函数都定义在theme.php中。以get_index_template为例:作用在当前或父模板下检索index模板路径,位置在theme.php725行。function get_index_template() { return get_query_template('index'); }在这个函数里面,就把主题的模板给装载进来了,如何 *** 作的?马上来~~

再看-laoder.php,这个文件总共只有45行。它的作用是基于访问的URL装载正确的模板.

文件第六行,也是第一条语句,如下:

if ( defined('WP_USE_THEMES') && WP_USE_THEMES )     do_action('_redirect');

首先判断是否使用themes,这个WP_USE_themeS常量在index.PHP中第一句就被设置为true。因此条件成立,会执行do_action(‘template_redirect’)语句。

do_action('template_redirect')都做了什么?默认的有如下:

‘template_redirect’的Action(动作)在include下的文件中出现。除了这里的do_action外,还有其他三个文 件中:default-filters.php,和ms-default-filters.php中以及canonical.php中出现。不包括wp- content目录下面出现的。

canonical.php (411行):  add_action(‘template_redirect’,‘redirect_canonical’);

default-filters.php(200行): add_action( ‘template_redirect’,   ‘wp_shortlink_header’,11,0 );

default-filters.php(243行):  add_action( ‘template_redirect’,‘wp_old_slug_redirect’);

ms-default-filters.php(32行):  add_action( ‘template_redirect’,‘maybe_redirect_404′ );

ms-functions.php(1353行):  add_action( ‘template_redirect’,‘redirect_mu_dashboard’ );

default-filters.php文件设置了大部分默认的filter和action。文件内容都是诸如下面的形式。

add_action( ‘xxx’,'xxxx’);

ms-default-filters.PHP是多站点时候设置的,内容类似default-filters.PHP。默认情况下没有开启多站点。如果需要开启,请按照的指导文件 *** 作。

add_action( 'template_redirect','wp_shortlink_header',0)
wp_shortlink_header位于文件link-template.PHP 2230行。
作用是如果当前页面定义了短连接,就在header中发送个短链接.形容:
 
这样的缩短网址。
add_action( 'template_redirect','wp_old_slug_redirect');

wp_old_slug_redirect() 在query.PHP2807行,slug是什么?slug是url的一部分。在wordpress后台的永久链接设置(/wp-admin /options-permalink.PHP)里,用户可以自定义链接格式。绝大多数自定义的用户喜欢在url中包含由文章标题生成的一串字符,这一串 字符就是post slug。这个函数功能是重定向old slug到正确的链接。

接下来是个判断语句;

// Process Feeds and trackbacks even if not using themes. if ( is_robots() ) :     do_action('do_robots');     return; elseif ( is_Feed() ) :     do_Feed();     return; elseif ( is_trackback() ) :     include( ABSPATH . 'wp-trackback.PHP' );     return; endif;

is_robots函数判断当前查询是否是robot。位于query.PHP491行。

do_robots

然后是个大的if语句:

if ( defined('WP_USE_themeS') && WP_USE_themeS ) :     $template = false;     if     ( is_404()   && $template = get_404_template() ) :     elseif ( is_search() && $template = get_search_template()) :     elseif ( is_tax() && $template = get_taxonomy_template()) :     elseif ( is_front_page() && $template = get_front_page_template()) :     elseif ( is_home() && $template = get_home_template()) :     elseif ( is_attachment() && $template = get_attachment_template()) :         remove_filter('the_content','prepend_attachment');     elseif ( is_single() && $template = get_single_template()) :     elseif ( is_page() && $template = get_page_template()) :     elseif ( is_category() && $template = get_category_template()) :     elseif ( is_tag()&& $template = get_tag_template()) :     elseif ( is_author()&& $template = get_author_template()) :     elseif ( is_date()&& $template = get_date_template()) :     elseif ( is_archive()&& $template = get_archive_template()) :     elseif ( is_comments_popup() && $template = get_comments_popup_template() ) :     elseif ( is_paged()&& $template = get_paged_template()          ) :     else :         $template = get_index_template();     endif;      if ( $template = apply_filters( 'template_include',$template ) )         include( $template );     return; endif;

这个大if语句中形如get_xxxx_template()的函数都定义在theme.PHP中。

以get_index_template为例:作用在当前或父模板下检索index模板路径,位置在theme.PHP725行。

function get_index_template() {   return get_query_template('index'); }

在这个函数里面,就把主题的模板给装载进来了,如何 *** 作的?马上来~~

总结

以上是内存溢出为你收集整理的走进wordpress 详细说说template-loader.php全部内容,希望文章能够帮你解决走进wordpress 详细说说template-loader.php所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/1024632.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存