走進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`); }
在這個函式裡面,就把主題的模板給裝載進來了,如何操作的?馬上來~~
本文轉自黃聰部落格園部落格,原文連結:http://www.cnblogs.com/huangcong/p/4741046.html,如需轉載請自行聯絡原作者
相關文章
- 【Docker】(10)---詳細說說 Dockerfile檔案Docker
- mysql processlist詳細說明MySql
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- 面試官:你說你精通 Docker,那你來詳細說說 Dockerfile 吧面試Docker
- mysqldump引數詳細說明MySql
- mysql replace into用法詳細說明MySql
- redis info命令詳細說明Redis
- Emacs詳細使用說明(轉)Mac
- memset函式詳細說明函式
- 說說RxJava怎麼走的歪路RxJava
- Flask-Limit使用詳細說明FlaskMIT
- Linux sed命令詳細說明Linux
- VNC安裝配置詳細說明VNC
- Nginx配置檔案詳細說明Nginx
- php中curl的詳細解說PHP
- CocoaPods | iOS詳細使用說明iOS
- session的詳細說明和用法Session
- SRVCTL 命令詳細說明文件(譯)
- 總帳介面表詳細說明
- 細說CookieCookie
- 細說WebServiceWeb
- 流量控制工具TC詳細說明
- linux--ps命令詳細解說Linux
- sql server系統表詳細說明SQLServer
- zt:SRVCTL 命令詳細說明文件(譯)
- mysql uninstall plugins 詳細說明MySqlPlugin
- jpa 方法 命名規則 詳細說明
- winscp操作說明,winscp操作說明的詳細解讀
- 走進wordpressdo_action函式函式
- WordPress安裝簡要說明
- 面試官:實戰中用過CountDownLatch嗎?詳細說一說,我:啊這面試CountDownLatch
- JQuery Datatables Columns API 引數詳細說明jQueryAPI
- 寬頻路由器的詳細說明路由器
- MySQL mysqldump命令的引數詳細說明MySql
- 《爐石傳說》亡語牧詳細攻略分享
- oracle的dbms_stats包詳細解說Oracle
- Oracle RAC中Srvctl命令詳細說明(轉)Oracle