web-dev-qa-db-fra.com

Comment puis-je obtenir wp_head () en tant que chaîne au lieu de la répercuter?

J'utilise PHP modèles de guidon et je souhaite conserver tout le code HTML dans le fichier de modèle afin que je n'ai pas de fichier header.php, mais plutôt que le guidon ressemble à

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

où wpHead est un assistant qui n'a rien d'autre que wp_head(); mais la sortie vient en premier avant la balise <html>. Je pense que je vais devoir utiliser un tampon de sortie pour le stocker en tant que chaîne ... Est-ce la seule/meilleure façon?

Le plan avec la chaîne consiste à l'ajouter au tableau de données transmis à la fonction de rendu du guidon:

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

Et puis simplement le sortir directement dans le modèle au lieu de l’aider:

<html>
<head>
    <!-- other head stuff -->
    {{{wpHead}}} <!-- wp head output -->
</head>
<body>
    {{{postContentFiltered}}}
</body>
1
tsdexter

Vous pouvez utiliser la mise en mémoire tampon de sortie de PHP. Avec cela, vous pouvez écrire un wrapper pour la fonctionget_head()/

function wpse251841_wp_head() {
    ob_start();
    wp_head();
    return ob_get_clean();
}

Vous pouvez ensuite l'utiliser comme

$data = array(
    'wpHead' => wpse251841_wp_head(),
    'postContent' => $post->post_content,
    'postContentFiltered' => apply_filters( 'the_content', $post->post_content )
);

Référence: Fonctions de contrôle de sortie

1
Tunji