zoukankan      html  css  js  c++  java
  • 黄聪:走进wordpress 详细说说template-loader.php

    再看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'); }

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

  • 相关阅读:
    HDU 1009 FatMouse' Trade
    HDU 2602 (简单的01背包) Bone Collector
    LA 3902 Network
    HDU 4513 吉哥系列故事——完美队形II
    LA 4794 Sharing Chocolate
    POJ (Manacher) Palindrome
    HDU 3294 (Manacher) Girls' research
    HDU 3068 (Manacher) 最长回文
    Tyvj 1085 派对
    Tyvj 1030 乳草的入侵
  • 原文地址:https://www.cnblogs.com/huangcong/p/4741046.html
Copyright © 2011-2022 走看看