web-dev-qa-db-fra.com

Comment obtenir le code HTML jusqu'au </ head>?

Je code un plugin qui ajoute un filtre à single_template. La fonction de filtrage renvoie avec succès le chemin d'accès à mon modèle show-post-in-a-lightbox.php.

Comme son nom l’indique, mon modèle a pour but d’afficher un seul message dans une lightbox. Par conséquent, je dois afficher uniquement le contenu du message et éviter la barre de titre, les menus, les barres latérales, les pieds de page, etc. Cependant, pour que le contenu de la publication s'affiche correctement, j'ai besoin de la section <head> habituelle avec toutes les balises <link> des feuilles de style et des balises <script> requises.

Mon code de modèle est:

<?php
/*
 Template Name: show-post-in-lightbox
 *
*/

get_header(); 
?>

<div id="primary" class="content-area">
  <main id="main" class="site-main" role="main">
    <?php
    global $post;
    // Start the loop.
    while ( have_posts() ) : the_post();

      $content = $post->post_content;
      $content = apply_filters('the_content', $content);
      $content = str_replace(']]>', ']]&gt;', $content);
      echo $content;

Cela fonctionne dans le sens où il montre le contenu du message, mais également la bannière au-dessus, avec le logo du site, le titre (je ne parle pas de <title>, celui-là est ok, mais je veux dire <header id="masthead" class="site-header">) et reste là.

Si je commente la ligne get_header();, elle affiche uniquement le contenu, mais sans les styles et les scripts requis.

Existe-t-il une fonction qui renvoie (ou affiche) uniquement la balise <head> (ou uniquement la balise </head>) d'une publication donnée?

1
Lucio Crusca

Le style des frontaux est généralement un thème que les plugins devraient éviter. Il n’existe pas de moyen simple de savoir comment un élément est mis en forme sans le mettre en forme dans son intégralité, car cela dépend en partie du contenu lui-même. En outre, comme le style est fondamentalement aléatoire à partir du plugin auteur du plugin, il est peu probable un algorithme général pour l'ajuster à tout ce dont vous avez besoin de manière fiable.

La meilleure approche qui me vienne à l’esprit est d’envelopper le contenu avec votre propre div et d’utiliser JS pour masquer tout le reste de la page. Néanmoins, il est fort probable que vous obtiendrez un type de vie mobile dans votre visionneuse, ce qui pourrait ne pas être ce que vous cherchez.

3
Mark Kaplun

Vous pouvez utiliser la fonction wp_head(), il vous suffit d’ajouter les balises html et body d’ouverture et les balises head:

<?php
/*
 * Template Name: show-post-in-lightbox
 */
?>
<!DOCTYPE html>
<html>
<head>
    <?php wp_head(); ?>
</head>

<body>

<!-- Content here -->

<?php get_footer(); ?>

Si votre pied de page ferme des éléments/divs autres que html et body, veillez à les ouvrir dans ce modèle.

De plus, wp_head() n'inclut pas nécessairement tout ce qui est dans l'élément head, vérifiez le fichier header.php de votre thème. Il devrait avoir la fonction wp_head() elle-même, il suffit de vérifier tout ce qui a été ajouté séparément que vous pourriez avoir besoin d'inclure dans la head.

Une autre option serait de copier header.php, de le renommer comme en-tête-post.php, de supprimer tout ce que vous ne voulez pas voir apparaître dans les messages, puis dans votre modèle de menu déroulant, utilisez get_header( 'post' ); pour utiliser cette version de l'en-tête:

<?php
/*
 * Template Name: show-post-in-lightbox
 */

get_header( 'post' ); ?>

<!-- Post content here -->

<?php get_footer(); ?>
0
Jacob Peattie