WordPress: сохранить `get_template_part ()` в переменную - PullRequest
48 голосов
/ 28 апреля 2011

Короче, все, что мне нужно, это заставить мой WordPress сделать это

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

но get_template_part() не возвращает HTML, а печатает его.
Мне нужен этот HTML-код, хранящийся в $var. У вас есть идеи, как это сделать?

Ответы [ 3 ]

76 голосов
/ 28 апреля 2011

Это не то, для чего была get_template_part, get_template_part по сути ведет себя как PHP-функция require. Джастин Тэдлок пишет здесь больше об этом , а также рассказывает о функции 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;
}
13 голосов
/ 26 июля 2011

Мне не нравится выходная буферизация, хотя +1 даже за то, что я думаю об этом как о опции!

Я думаю, что Хельга была чем-то занята, но вам все равно нужно уважать child_themes и путь к теме, поэтому используйте locate_template() (также, как предложил Саймон).

Это прекрасно работает и может даже использоваться внутри фильтра или (в моем случае) функции шорткода (я хотел, чтобы мой шорткод выводил содержимое в файл стиля шаблона, чтобы отделить слой отображения от логического слоя).

return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php!
4 голосов
/ 07 мая 2011

как насчет?

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

Я уверен, что есть лучший способ, но мне кажется, что он работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...