Inserare HTML imediat după tag-ul <body>
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?

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/

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?

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...

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.

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

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

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.

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.

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.
