web-dev-qa-db-ja.com

エコーするのではなく、wp_head()を文字列として取得する方法を教えてください。

私はPHP handlebarsテンプレートを使用していて、テンプレートファイルにすべてのHTMLを保存したいので、header.phpを持っていませんが、ハンドルバーは次のようになっています。

<html>
  <head>
    {{#wpHead}}
  </head>

ここでwpHeadはwp_head();以外何もないヘルパーですが、出力は<html>タグの前に最初に来ます。私はそれを文字列として保存するために出力バッファリングを使用する必要があるだろうと思っています...それが唯一の/最善の方法ですか?

文字列の計画はそれをhandlebarsレンダリング関数に渡されるデータ配列に追加することです。

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>
1
tsdexter

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 )
);

参考: 出力制御機能

1
Tunji