Inserire HTML subito dopo il tag <body>

7 mar 2016, 10:13:56
Visualizzazioni: 89.5K
Voti: 17

Sto utilizzando il tema WordPress Twenty Twelve (per essere precisi, un tema child).

Vorrei sapere come inserire del codice HTML subito dopo l'apertura del tag body, utilizzando solo functions.php e non modificando header.php.

È possibile?

1
Commenti

Per i futuri lettori che sviluppano il loro tema o che hanno temi scadenti/vecchi, consultare questa nota della documentazione.

Walf Walf
14 giu 2023 04:30:27
Tutte le risposte alla domanda 3
5
38

Twenty Twelve non ha alcun hook che venga eseguito immediatamente dopo il tag di apertura <body>.

Pertanto, nel tuo child theme che estende il tema genitore Twenty Twelve, copia il file header.php nella directory del tuo child theme.

Apri il file header.php nel tuo child theme e subito dopo il tag di apertura body aggiungi un action hook al quale potrai agganciarti tramite il tuo file functions.php.

Ad esempio, nel tuo file twenty-twelve-child/header.php:

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

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

Poi nel tuo file twenty-twelve-child/functions.php:

function custom_content_after_body_open_tag() {

    ?>

    <div>Il mio contenuto personalizzato</div>

    <?php

}

add_action('after_body_open_tag', 'custom_content_after_body_open_tag');

Questo verrà quindi renderizzato nel tuo HTML come:

<body>
<div>Il mio contenuto personalizzato</div>

Lettura consigliata:

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

AGGIORNAMENTO: LUGLIO 2019

Come commentato da Junaid Bhura, a partire da WordPress 5.2 è stata introdotta una nuova funzione helper per i temi wp_body_open pensata per essere utilizzata come altre funzioni helper quali wp_head e wp_footer.

Ad esempio:

<html>
  <head>

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

     <!-- CONTENUTO DEL BODY QUI -->
 
    <?php wp_footer(); ?>
 
  </body>
</html>

Nel file functions.php del tuo tema (o in un altro posto appropriato)

function custom_content_after_body_open_tag() {

    ?>

    <div>Il mio contenuto personalizzato</div>

    <?php

}

add_action('wp_body_open', 'custom_content_after_body_open_tag');

IMPORTANTE

Dovresti assicurarti che l'hook esista all'interno del tema nel quale vuoi iniettare il contenuto, poiché potrebbe non essere ancora ampiamente adottato dalla community.

Se NON esiste, dovrai comunque seguire il principio di estendere il tema con un child theme con l'eccezione che TU dovresti usare:

<?php wp_body_open(); ?>

...invece di OPPURE in aggiunta a:

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

Lettura consigliata:

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

7 mar 2016 11:11:40
Commenti

Grazie. Proverò questo approccio.

C'è qualche altro modo per farlo senza aggiungere il file header.php?

Ad esempio usando qualcosa come preg_replace?

Ramanana Ramanana
7 mar 2016 11:22:23

Potresti farlo, ad esempio agganciandoti a template_include o simile, tuttavia è fortemente sconsigliato perché non solo è inefficiente, ma potrebbe essere molto inaffidabile se qualcosa cambiasse nel tema genitore a causa di un aggiornamento. Estendere il tema genitore usando un child theme è la best practice, è prevedibile e atteso, inoltre ti dà un grande controllo, come nell'esempio mostrato sopra. Comunque se vuoi usare preg_replace sta a te...

Adam Adam
7 mar 2016 12:27:14

Grazie ancora.

Sto usando il tuo codice e funziona bene.

In realtà la mia domanda era dal punto di vista di un child theme ma usando semplicemente il functions.php del tema figlio.

Ma comunque dopo aver implementato il tuo codice, mi rendo conto che è semplice, leggero e diretto.

Ramanana Ramanana
7 mar 2016 12:47:24

Da WordPress 5.2, è disponibile un tag standard: wp_body_open() : https://developer.wordpress.org/reference/functions/wp_body_open/

Junaid Bhura Junaid Bhura
26 lug 2019 03:53:17

@JunaidBhura grazie per il tuo suggerimento su questo vecchio thread. Ho aggiornato l'esempio sopra per spiegare meglio la nuova funzione helper del core e l'hook che potrebbe essere presente nei temi e, si spera, ampiamente adottato in futuro.

Adam Adam
26 lug 2019 14:08:43
1

Una soluzione molto, molto, molto sporca sarebbe:

/* Inserisci il codice di tracciamento o altre cose direttamente dopo l'apertura del BODY */
add_filter('body_class', 'wps_add_tracking_body', PHP_INT_MAX); // assicurati che sia l'ultimo filtro nella coda
function wps_add_tracking_body($classes) {

  // chiudi il tag <body>, inserisci il codice, apri qualche altro tag con una variabile senza senso      
  $classes[] = '"><script> /* fai quello che vuoi */ </script><noscript></noscript novar="';

  return $classes;
}
21 lug 2017 12:48:15
Commenti

+1 grazie per il trucco

Vaibhav Gupta Vaibhav Gupta
2 ott 2019 17:46:57
4
-2

Aggiungi questo codice in functions.php

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

}
add_action('wp_head', 'my_function');
11 lug 2016 13:05:36
Commenti

Questo verrà mostrato all'interno del <head> non del <body>.

cjbj cjbj
11 lug 2016 13:08:56

Sembra che wp sia abbastanza intelligente, in realtà viene aggiunto al body! Se è un meta tag allora verrà iniettato nell'header, altrimenti verrà mostrato nel body.

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

Credo che @cjbj abbia ragione. Sembra che sia il browser a spostarlo nel body, non WordPress. Visualizza il codice sorgente di una pagina dove l'hai inserito nell'head e lo troverai lì.

Danger Danger
29 mar 2018 20:15:42

Non farlo! Questo creerà HTML non valido inserendo il <div> nell'<head>. Il browser cercherà di risolvere il problema chiudendo l'head (inserendo </head>) appena prima del <div>. Questo può rompere la tua pagina, perché tutto ciò che viene dopo il <div> inserito finirà nel body invece che nell'head.

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