2011-04-28 77 views
40

總之,我需要的是讓我的WordPress做的WordPress:節省`get_template_part()`變量

$var = get_template_part('loop', 'index'); 

但是,get_template_part()不會返回HTML,它打印它。
我需要這個HTML存儲在$var - 你有什麼想法如何做到這一點?

+0

你會在以後打印呢?我的意思是'$ var'。 – ewroman 2014-12-14 22:32:49

回答

63

這不是get_template_part是爲,get_template_part行爲基本上像PHP的需要的功能。 Justin Tadlock writes a lot more about this here並且還談到了一個可能對您更有用的Wordpress功能 - locate_template

另外,如果你是想破解使用get_template_part此功能,您可以使用模板緩衝:

function load_template_part($template_name, $part_name=null) { 
    ob_start(); 
    get_template_part($template_name, $part_name); 
    $var = ob_get_contents(); 
    ob_end_clean(); 
    return $var; 
} 
+0

當我把這個在我的主題,我只得到培根,而不是文件的內容....:回聲「培根」。 load_template_part( '註冊-form.php的'); – helgatheviking 2011-05-06 22:23:47

+0

我不確定Atomicus在哪裏說他們想要文字未處理的PHP,get_template_part充當包含而不是文件內容獲取者。 – 2011-05-08 15:54:39

+1

應該回應說你是對的這完全有效,我給錯誤的信息提供給函數(添加.php)。 雖然我會設置$ part_name = NULL默認情況下,所以你可以叫load_template_part(「內容拋開」) – helgatheviking 2011-05-09 18:25:40

4

怎麼樣?

$file = file_get_contents(STYLESHEETPATH . '/template-part.php'); 
return $file; 

我敢肯定有更好的辦法,但這似乎對我有效。

12

我不愛輸出緩衝,雖然+1甚至想到,作爲一個選項!

我覺得海爾格是要發生什麼,但你需要還是尊重child_themes和主題的路徑,所以使用locate_template(),而不是(也西蒙建議)。

這很好,甚至可以用在一個過濾器或(在我的情況下)短代碼功能(我想我的短代碼輸出模板樣式文件內的內容,將顯示層與邏輯層分開) 。

return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php! 
+2

我試過,但沒有執行模板頁面,有沒有辦法執行它並返回輸出字符串? – Ayyash 2013-08-28 16:22:36

+0

您需要根據@ SimonScarfe的回答使用輸出緩衝。 – 2013-08-28 21:13:59

+0

它只讀取文件,不執行它。 – Codebeat 2016-04-08 00:41:48