WordPress: сохранить `get_template_part ()` в переменную

37

Короче говоря, мне нужно только сделать мой WordPress

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

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

  • 0
    ты распечатал бы это позже? Я имею в виду $var .
Теги:
templates

3 ответа

59

Это не то, для чего был get_template_part, get_template_part по существу ведет себя так, как PHP требует функции. Джастин Тадлок пишет об этом подробнее об этом, а также рассказывает о функции 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
    когда я помещаю это в мою тему, я получаю только бекон, а не содержимое файла ....: echo "бекон". load_template_part ( 'учетно-form.php');
  • 0
    Я не уверен, где Atomicus говорит, что они хотят буквальный необработанный PHP, get_template_part действует как включение, а не как средство получения содержимого файла.
Показать ещё 6 комментариев
11

Я не люблю Buffing Output Buffering, хотя +1 за то, что даже думал об этом как о опции!

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

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

return file_get_contents(locate_template("template-file-name.php")); // don't forget the .php!
  • 2
    Я пробовал это, но это не выполнило страницу шаблона, есть ли способ выполнить ее и вернуть строку вывода?
  • 0
    В этом случае вы должны использовать буферизацию вывода согласно ответу @ SimonScarfe.
Показать ещё 1 комментарий
4

а что?

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню