如何将wp_head()作为字符串获取,而不是回显它?

时间:2017-01-09 作者:tsdexter

我正在使用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>

2 个回复
最合适的回答,由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

相关推荐

Use of Templates in a Plugin

我正在创建一个插件。为此,我编写了自己的模板。现在我想在我的插件目录中创建模板文件。但这并不管用。由于我使用了插件目录,wordpress doesent知道我的模板是wp templates。让WP知道这些文件是wordpress模板的最佳方式是什么?感谢您的回答:)