Inserare HTML imediat după tag-ul <body>

7 mar. 2016, 10:13:56
Vizualizări: 89.5K
Voturi: 17

Folosesc tema Wordpress Twenty Twelve (mai precis, o temă copil a acesteia).

Vreau să știu cum să inserez cod HTML imediat după deschiderea tag-ului body, folosind doar functions.php și nu header.php.

Este posibil acest lucru?

1
Comentarii

Pentru cititorii viitori care dezvoltă propria temă sau au teme proaste/vechi, consultați această notă din documentație.

Walf Walf
14 iun. 2023 04:30:27
Toate răspunsurile la întrebare 3
5
38

Tema Twenty Twelve nu are niciun hook care să se declanșeze imediat după deschiderea tag-ului <body>.

Prin urmare, în tema ta copil care extinde tema părinte Twenty Twelve, copiază fișierul header.php în directorul temei copil.

Deschide fișierul header.php din tema ta copil și imediat după deschiderea tag-ului body adaugă un action hook pe care îl poți apoi lega prin fișierul tău functions.php.

De exemplu, în fișierul twenty-twelve-child/header.php:

<body <?php body_class(); ?>>

<?php do_action('after_body_open_tag'); ?>

Apoi în fișierul twenty-twelve-child/functions.php:

function custom_content_after_body_open_tag() {

    ?>

    <div>Conținutul meu personalizat</div>

    <?php

}

add_action('after_body_open_tag', 'custom_content_after_body_open_tag');

Aceasta va fi apoi randată în HTML-ul tău ca:

<body>
<div>Conținutul meu personalizat</div>

Lectură recomandată:

https://developer.wordpress.org/reference/functions/do_action/

ACTUALIZARE: IULIE, 2019

După cum a comentat Junaid Bhura, începând cu WordPress 5.2 a fost introdusă o nouă funcție de ajutor pentru teme wp_body_open care este destinată să fie utilizată similar cu alte funcții de ajutor precum wp_head și wp_footer.

De exemplu:

<html>
  <head>

    <?php wp_head(); ?>
 
  </head>
  <body <?php body_class(); ?>>
 
    <?php wp_body_open(); ?>

     <!-- CONȚINUT BODY AICI -->
 
    <?php wp_footer(); ?>
 
  </body>
</html>

În fișierul functions.php al temei tale (sau altundeva în mod adecvat)

function custom_content_after_body_open_tag() {

    ?>

    <div>Conținutul meu personalizat</div>

    <?php

}

add_action('wp_body_open', 'custom_content_after_body_open_tag');

IMPORTANT

Trebuie să te asiguri că hook-ul există în tema în care dorești să injectezi, deoarece acesta poate să nu fie încă adoptat pe scară largă de către comunitate.

Dacă NU există, va trebui să urmezi principiul extinderii temei cu o temă copil cu excepția faptului că TU vei folosi:

<?php wp_body_open(); ?>

...în loc de SAU în plus față de:

<?php do_action('after_body_open_tag'); ?>

Lectură recomandată:

https://developer.wordpress.org/reference/functions/wp_body_open/

7 mar. 2016 11:11:40
Comentarii

Mulțumesc. Voi încerca asta.

Există vreo altă metodă de a face asta fără a adăuga header.php?

Cum ar fi ceva folosind preg_replace?

Ramanana Ramanana
7 mar. 2016 11:22:23

Ai putea, de exemplu prin conectarea la template_include sau similar, însă este puternic recomandat să eviți această abordare deoarece nu numai că este ineficientă, dar poate fi foarte nesigură dacă ceva se schimbă în tema părinte din cauza unei actualizări. Extinderea temei părinte folosind o temă copil este cea mai bună practică, este predictibilă și așteptată, plus că îți oferă un grad mare de control, cum ar fi exemplul arătat mai sus. Totuși, dacă vrei să folosești preg_replace, alegerea este a ta...

Adam Adam
7 mar. 2016 12:27:14

Mulțumesc din nou.

Folosesc codul tău și funcționează perfect.

De fapt, întrebarea mea era din perspectiva unei teme copil, dar folosind doar functions.php din tema copil.

Dar oricum, după implementarea codului tău, am realizat că este simplu, ușor și eficient.

Ramanana Ramanana
7 mar. 2016 12:47:24

Începând cu WordPress 5.2, este disponibilă o etichetă standard: wp_body_open() : https://developer.wordpress.org/reference/functions/wp_body_open/

Junaid Bhura Junaid Bhura
26 iul. 2019 03:53:17

@JunaidBhura mulțumesc pentru sugestia ta pe acest fir vechi. Am actualizat exemplul de mai sus pentru a explica noua funcție de ajutor din nucleu și cârligul care poate fi prezent în teme și, sperăm, adoptat pe scară largă în viitor..

Adam Adam
26 iul. 2019 14:08:43
1

O soluție foarte, foarte, foarte murdară ar fi:

/* Inserează cod de tracking sau alte elemente direct după deschiderea tag-ului BODY */
add_filter('body_class', 'wps_add_tracking_body', PHP_INT_MAX); // asigură-te că acesta este ultimul filtru din coadă
function wps_add_tracking_body($classes) {

  // închide tag-ul <body>, inserează conținut, deschide alt tag cu o variabilă fără sens      
  $classes[] = '"><script> /* faci orice */ </script><noscript></noscript novar="';

  return $classes;
}
21 iul. 2017 12:48:15
Comentarii

+1 mulțumesc pentru truc

Vaibhav Gupta Vaibhav Gupta
2 oct. 2019 17:46:57
4
-2

Adaugă acest cod în functions.php

function my_function() {
 echo'<div id="from_my_function"></div>';

}
add_action('wp_head', 'my_function');
11 iul. 2016 13:05:36
Comentarii

Acesta va fi afișat în interiorul tag-ului <head>, nu <body>.

cjbj cjbj
11 iul. 2016 13:08:56

Se pare că WordPress este destul de inteligent, de fapt este adăugat în body! Dacă este un meta tag, atunci va fi introdus în header, altfel va fi afișat în body.

Mohamed Salem Lamiri Mohamed Salem Lamiri
1 feb. 2018 17:30:34

Cred că @cjbj are dreptate. Se pare că este browserul cel care îl mută în body, nu WordPress. Vizualizați codul sursă al unei pagini unde ați introdus în head și acolo îl veți găsi.

Danger Danger
29 mar. 2018 20:15:42

Nu face asta! Acest lucru va crea HTML invalid prin inserarea <div> în <head>. Browserul va încerca să remedieze această problemă prin închiderea head-ului (inserând </head>) chiar înainte de <div>. Acest lucru poate strica pagina ta, deoarece totul după <div> inserat va fi acum în body, nu în head.

Daniel Morell Daniel Morell
10 feb. 2021 19:16:21