深入解析WordPress中加載模板的get_template_part函數(shù)
最近研究官方主題 Twenty Eleven ,有一些東西網(wǎng)上現(xiàn)成的中文資料不好找,在博客里記載下來,算是分享,也算是備忘,wordpress 3.0 以后就開始便有了get_template_part() 這個(gè)函數(shù) ,應(yīng)該是為文章呈現(xiàn)形式提供更為多樣化的選擇而給出的新功能。
Twenty Eleven 中 實(shí)例如下:
Twenty Eleven index.php 文件
行:21
<?php if ( have_posts() ) : ?> <?php twentyeleven_content_nav( 'nav-above' ); ?> <?php /* Start the Loop 在循環(huán)中使用以調(diào)用不同類型的文章 */ ?> <?php while ( have_posts() ) : the_post(); ?> <?php get_template_part( 'content', get_post_format() ); ?> <?php endwhile; ?> ............................ <?php endif; ?>
描述:
加載一個(gè)制定的模板到另一個(gè)模板里面(不同于包含header,sidebar,footer).
使得一個(gè)主題使用子模板來實(shí)現(xiàn)代碼段重用變得簡單
用于在模板中包含指定的模板文件,只需用指定參數(shù)slug和name就可以包含文件{slug}-{name}.php,最重要的功能是如果沒有這個(gè)文件就包含沒有{name}的.php文件文件
使用方法:
<?php get_template_part( $slug, $name ) ?>
參數(shù):
- $slug (必須) 通用的模板名
- $name (可選) 指定的模板名
示例:
使用 loop.php 在子主題里面
假設(shè)主題文件夾wp-content/themes下父主題是twentyten子主題twentytenchild,那么下面的代碼:
<?php get_template_part( 'loop', 'index' ); ?>
php 的require()函數(shù)將按下面優(yōu)先級包含文件
1. wp-content/themes/twentytenchild/loop-index.php
2. wp-content/themes/twentytenchild/loop.php
3. wp-content/themes/twentyten/loop-index.php
4. wp-content/themes/twentyten/loop.php
導(dǎo)航(這個(gè)例子很爛,但卻是另一種使用思路)
使用通用的nav.php文件給主題添加導(dǎo)航條:
<?php get_template_part( 'nav' ); // Navigation bar (nav.php) ?> <?php get_template_part( 'nav', '2' ); // Navigation bar #2 (nav-2.php) ?> <?php get_template_part( 'nav', 'single' ); // Navigation bar to use in single pages (nav-single.php) ?>
get_template_part() 的鉤子詳解
因?yàn)樵诠俜街黝}(Twenty Eleven)中 get_template_part() 函數(shù)被大量使用,所以就目前來看,該函數(shù)應(yīng)該算是比較熱門的一個(gè)函數(shù)了,之前有寫過一篇文章講述該函數(shù)的具體使用方法,在這里也就不便再贅述,本文主要針對該函數(shù)的 add_action 中的 hook $tag 值進(jìn)行探討,因?yàn)?,WP hook 中林林總總有那么些函數(shù)在$tag 值中比較讓人費(fèi)解。
與普通hook的區(qū)別
普通的hook的$tag 是一個(gè)固定值,而 get_template_part() 確是一個(gè)可變值,好吧先不說,wp這么做給我們實(shí)現(xiàn)一個(gè)簡單功能帶來多少麻煩,但如此設(shè)置確實(shí)給多樣化的主題實(shí)現(xiàn)帶來了不少方便之處。
實(shí)現(xiàn)這一原理的源代碼如下,截取自 WordPress 源程序。
function get_template_part( $slug, $name = null ) { //$tag = "get_template_part_{$slug}" //也就是,get_template_part_+你當(dāng)時(shí)設(shè)置的$slug值 do_action( "get_template_part_{$slug}", $slug, $name ); $templates = array(); if ( isset($name) ) $templates[] = "{$slug}-{$name}.php"; $templates[] = "{$slug}.php"; locate_template($templates, true, false); }
實(shí)例
像上面那樣說,可能也許基本上有點(diǎn)看不明白,好吧給點(diǎn)實(shí)例
//復(fù)習(xí)一下get_template_part($slug, $name)的用法, //如果你在主題里這樣 get_template_part( 'index' , 'photo'); //那么 WP 會去找主題根目錄下 index-photo.php 文件 //那么我們想掛一個(gè)函數(shù)的話就得像如下 function addFunction ($slug, $name){ echo $slug; } add_action("get_template_part_index","addFunction",10,2);
get_template_part() 函數(shù)詳解備忘
相關(guān)文章
php算開始時(shí)間到過期時(shí)間的相隔的天數(shù)
php算開始時(shí)間到過期時(shí)間的相隔的天數(shù),同理可以實(shí)現(xiàn)相隔年,小時(shí),分,秒等數(shù)2011-01-01php使用preg_match()函數(shù)驗(yàn)證ip地址的方法
這篇文章主要介紹了php使用preg_match()函數(shù)驗(yàn)證ip地址的方法,涉及php針對數(shù)字及字符串的正則匹配操作相關(guān)技巧,需要的朋友可以參考下2017-01-01windows服務(wù)器使用IIS時(shí)thinkphp搜索中文無效問題
在用ThinkPHP開發(fā)的網(wǎng)站,在linux服務(wù)器下使用過一段時(shí)間,一切正常。但是更換到windows服務(wù)器時(shí),發(fā)現(xiàn)搜索的時(shí)候,無法搜索中文,查不出相應(yīng)的結(jié)果。查看數(shù)據(jù)庫發(fā)現(xiàn)數(shù)據(jù)是存在的。linux服務(wù)器下正常,而且搜索數(shù)字或字母程序正常,說明程序是沒有任何問題的。2023-06-06PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查
這篇文章主要介紹了PHPStorm+Xdebug進(jìn)行emote Debug時(shí)無法進(jìn)入斷點(diǎn)問題排查,遇到類似問題的同學(xué),可以詳細(xì)參考下2021-04-04深入了解 register_globals (附register_globals=off 網(wǎng)站打不開的解決方法)
由于register_globals設(shè)置控制PHP變量訪問范圍,如果開啟會引起不必要的安全問題,所以這里對其進(jìn)行了強(qiáng)制關(guān)閉,如果站長的空間不支持,可以采用以下幾種辦法進(jìn)行修改,供廣大站長參考2012-06-06PHP函數(shù)用法詳解【初始化、嵌套、內(nèi)置函數(shù)等】
這篇文章主要介紹了PHP函數(shù)用法,結(jié)合實(shí)例形式詳細(xì)分析了PHP函數(shù)初始化、嵌套、內(nèi)置函數(shù)等相關(guān)定義、原理與操作注意事項(xiàng),需要的朋友可以參考下2020-06-06PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序
這篇文章主要介紹了PHP實(shí)現(xiàn)二維數(shù)組根據(jù)key進(jìn)行排序,在PHP中內(nèi)置了很多對數(shù)組進(jìn)行處理的函數(shù),有很多時(shí)候我們直接使用其內(nèi)置函數(shù)就能達(dá)到我們的需求,得到我們所想要的結(jié)果,需要的朋友可以參考下2023-10-10PHP實(shí)現(xiàn)防重復(fù)提交(防抖)的方法總結(jié)
當(dāng)涉及到處理表單提交或用戶點(diǎn)擊按鈕等操作時(shí),防抖(Debounce)是一種重要的技術(shù),它可以有效地防止不必要的重復(fù)操作,本文為大家整理了 PHP 中防抖的多種實(shí)現(xiàn)方法,需要的可以參考下2023-09-09