web-dev-qa-db-fra.com

Mise en retrait (tabulation) WP_head

Pour le moment, tout ce qui est inclus dans wp_head est entièrement justifié dans la vue code.

Considérant que tout mon autre code qui est autour du wp_head est indenté (tabulé) deux fois. Est-il possible d'ajouter un retrait/des tabulations à toutes les informations de wp_head?

Merci

2
mr. x

Une meilleure façon d'éviter les lignes indentées qui sont déjà indentées et que certains semblent être

function indented_wp_head(){
  ob_start();
  wp_head();
  $header = ob_get_contents();
  ob_end_clean();
  echo preg_replace("/\n</", "\n\t<", substr($header, 0, -1));
  echo "\n";
}
2
Michael

Techniquement, probablement, mais ne vaut probablement pas la peine (et les frais généraux). Si vous inspectez le code source avec quelque chose comme les outils de développement dans Chrome, votre code HTML sera automatiquement mis en retrait. En fait, certains plugins de mise en cache (comme W3 Total Cache) suppriment même tous les espaces pour améliorer les temps de chargement des pages.

Cela dit, si vous voulez vous assurer que votre contenu wp_head est en retrait, vous devez procéder comme suit:

  1. Ajoute une fonction à get_header qui s’exécute en dernier. Cette fonction récupère toutes les fonctions attachées à wp_head (à l'aide de $wp_filter['wp_head']), les supprime et les rattache à votre propre action personnalisée (my_wp_head par exemple).
  2. Une fonction personnalisée (my_wp_head() for example) devrait alors être attachée à wp_head
  3. Dans la fonction my_wp_head(), vous voudriez
    1. Créez un tableau de motifs regex de correspondance/remplacement ($patterns = array("pattern"=>"replace pattern");). Ce modèle doit rogner les espaces et rajouter des tabulations au début de chaque ligne.
    2. Appelez ob_start() pour capturer la sortie
    3. Traiter les fonctions wp_head précédentes en appelant do_action('my_wp_head')
    4. Traiter la sortie avec un appel à echo preg_replace( array_keys($patterns), array_values($patterns), ob_get_clean() );
2
doublesharp

Vous pouvez le résoudre en créant une fonction personnalisée dans "functions.php":

function indented_wp_head(){
    ob_start();
    wp_head();
    $header = ob_get_contents();
    ob_end_clean();
    echo preg_replace("/\n/", "\n\t", substr($header, 0, -1));
    echo "\n";
}

Il ne reste plus qu’à appeler cette fonction dans le "header.php":

<head>
    <!-- ... -->
    <?php indented_wp_head() ?>
</head>

Si vous souhaitez également l'utiliser pour wp_footer(), vous pouvez créer cette fonction à usage général dans "functions.php":

/**
 * Indents the output of
 * a function
 *
 * @return void
 */
if (! function_exists("print_indented")) {

    function print_indented($fn)
    {
        ob_start();
        call_user_func($fn);
        $html = ob_get_contents();
        ob_end_clean();
        echo preg_replace("/\n/", "\n\t", substr($html, 0, - 1));
        echo "\n";
    }
}

Et appelez-le dans "header.php" ou "footer.php" comme

<?php print_indented("wp_footer") ?>
<?php print_indented("wp_head") ?>
1
dude

En tant qu'additions, nous pouvons spécifier le nombre d'onglets pour les blocs HTML nécessitant plus d'un onglet et utiliser des paramètres pour les fonctions.

function add_indented($fn, $num_tabs=1, $params=null){
    ob_start();
    call_user_func($fn, $params);
    $html = ob_get_contents();
    ob_end_clean();
    $tabs="";
    for ($i=0 ; $i<$num_tabs ; $i++) $tabs.="\t";
    echo preg_replace("/\n/", "\n" . $tabs, substr($html, 0, - 1));
    echo "\n";
}

Avant

<?php wp_head(); ?>
<?php wp_footer(); ?>
<?php get_template_part('template-parts/content','home'); ?>

Après:

<?php print_indented("wp_head"); ?>
<?php print_indented("wp_footer"); ?>

<!-- Add 4 tabs -->    
<?php print_indented('get_template_part', 4,'template-parts/content', 'home'); ?>
0
xechino

Utilisez http://wordpress.org/plugins/wp-minify/ . Il va fusionner css, js & html + supprimer les commentaires inutiles. La vitesse de votre page sera améliorée et tout le code HTML de la source sera compacté.

Problème résolu, je suppose!

0
hawkidoki