我正在使用PHP Handlebar模板,并希望将所有HTML保留在模板文件中,这样我就没有标题了。php,而把手看起来像
<html>
<head>
{{#wpHead}}
</head>
其中wpHead是一个助手,除了
wp_head();
但输出在
<html>
标签我想我必须使用输出缓冲将其存储为字符串。。。这是唯一/最好的方法吗?
带有字符串的计划是将其添加到传递给Handlebar渲染函数的数据数组中:
global $post;
$data = array(
\'wpHead\' => get_wp_head_as_string(),
\'postContent\' => $post->post_content,
\'postContentFiltered\' => apply_filters( \'the_content\', $post->post_content )
);
render( \'default\', $data );
然后直接在模板中输出,而不是使用助手:
<html>
<head>
<!-- other head stuff -->
{{{wpHead}}} <!-- wp head output -->
</head>
<body>
{{{postContentFiltered}}}
</body>
最合适的回答,由SO网友:tsdexter 整理而成
多亏了@Tunji的回答,我用一个更通用的函数完成了这一点:
/**
* Use output buffering to convert a function that echoes
* to a return string instead
*/
function echo_to_string( $function )
{
ob_start();
call_user_func( $function );
$html = ob_get_contents();
ob_end_clean();
return $html;
}
然后可以这样使用:
$data->wpHead = echo_to_string( \'wp_head\' );
SO网友:Tunji
您可以使用PHP的输出缓冲。有了它,您可以为get_head()
作用
function wpse251841_wp_head() {
ob_start();
wp_head();
return ob_get_clean();
}
然后可以将其用作
$data = array(
\'wpHead\' => wpse251841_wp_head(),
\'postContent\' => $post->post_content,
\'postContentFiltered\' => apply_filters( \'the_content\', $post->post_content )
);
Reference: Output Control Functions