Fügen Sie HTML direkt nach dem <body> -Tag ein

9

Ich verwende das Wordpress-Thema Twenty Twelve (genauer gesagt ein Kind davon).

Ich möchte wissen, wie man HTML direkt nach dem Öffnen des Körpers in nur functions.php einfügt und nicht header.php verwendet.

Ist das möglich?

Ramanan
quelle

Antworten:

19

Twenty Twelve hat keine Haken, die unmittelbar nach dem Eröffnungs- <body>Tag ausgelöst werden.

Kopieren Sie daher in Ihrem untergeordneten Thema, das das übergeordnete Thema Zwanzig erweitert, das header.phpOver in Ihr untergeordnetes Themenverzeichnis.

Öffnen Sie die header.phpDatei in Ihrem untergeordneten Thema und fügen Sie direkt nach dem öffnenden Body-Tag einen Aktions-Hook hinzu, an den Sie sich dann über Ihre functions.phpDatei anschließen können.

Zum Beispiel in Ihrer twenty-twelve-child/header.phpDatei:

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

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

Dann in Ihrer twenty-twelve-child/functions.phpDatei:

function custom_content_after_body_open_tag() {

    ?>

    <div>My Custom Content</div>

    <?php

}

add_action('after_body_open_tag', 'custom_content_after_body_open_tag');

Dies wird dann in Ihrem HTML wie folgt gerendert:

<body>
<div>My Custom Content</div>

Literatur-Empfehlungen:

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

UPDATE: JULI 2019

Wie von Junaid Bhura aus WordPress 5.2 kommentiert, wurde eine neue Themen- Hilfsfunktionwp_body_open eingeführt, die für die Verwendung wie andere Hilfsfunktionen wp_headund vorgesehen ist wp_footer.

Zum Beispiel:

<html>
  <head>

    <?php wp_head(); ?>

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

    <?php wp_body_open(); ?>

     <!-- BODY CONTENT HERE -->

    <?php wp_footer(); ?>

  </body>
</html>

In Ihrer Theme functions.php Datei (oder passend woanders)

function custom_content_after_body_open_tag() {

    ?>

    <div>My Custom Content</div>

    <?php

}

add_action('wp_body_open', 'custom_content_after_body_open_tag');

WICHTIG

Sie sollten sicherstellen, dass der Hook innerhalb des Themas vorhanden ist, in das Sie einfügen möchten, da dies von der Community möglicherweise noch nicht weit verbreitet ist.

Wenn NICHT , müssen Sie weiterhin dem Prinzip folgen, das Thema um ein untergeordnetes Thema zu erweitern, mit der Ausnahme, dass SIE Folgendes verwenden würden:

<?php wp_body_open(); ?>

... anstelle von ODER zusätzlich zu:

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

Literatur-Empfehlungen:

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

Adam
quelle
Vielen Dank. Ich werde es versuchen. Gibt es eine andere Möglichkeit, dies zu tun, ohne die Datei header.php hinzuzufügen? Wie etwas mit preg_replace?
Ramanan
1
Sie könnten, wenn Sie sich zum Beispiel an template_includeoder ähnliches anschließen, jedoch dringend davon abgeraten werden, da dies nicht nur ineffizient ist, sondern auch sehr unzuverlässig sein kann, wenn sich aufgrund einer Aktualisierung etwas im übergeordneten Element ändert. Das Erweitern des übergeordneten Themas mithilfe eines untergeordneten Themas ist die beste Vorgehensweise. Es ist vorhersehbar und wird erwartet. Außerdem erhalten Sie viel Kontrolle, z. B. anhand des oben gezeigten Beispiels. Wenn Sie jedoch verwenden möchten preg_replace, liegt es an Ihnen ...
Adam
Noch einmal vielen Dank. Ich benutze Ihren Code und funktioniert gut. Eigentlich war meine Frage nur aus untergeordneter Sicht, aber einfach mit functions.php des untergeordneten Themas. Aber trotzdem, nachdem ich Ihren Code implementiert habe, stelle ich fest, dass er unkompliziert, leicht und einfach ist.
Ramanan
2
Seit WordPress 5.2 ist jetzt ein Standard-Tag verfügbar: wp_body_open (): developer.wordpress.org/reference/functions/wp_body_open
Junaid Bhura
@JunaidBhura danke für deinen Vorschlag zu diesem alten Thread. Ich habe das obige Beispiel aktualisiert, um die neue Kernhilfefunktion und den neuen Haken zu erläutern, die in Themen vorhanden sein und hoffentlich in Zukunft weit verbreitet sein werden.
Adam
3

Eine sehr, sehr, sehr schmutzige Lösung wäre:

/* Insert tracking code or other stuff directly after BODY opens */
add_filter('body_class', 'wps_add_tracking_body', PHP_INT_MAX); // make sure, that's the last filter in the queue
function wps_add_tracking_body($classes) {

  // close <body> tag, insert stuff, open some other tag with senseless variable      
  $classes[] = '"><script> /* do whatever */ </script><noscript></noscript novar="';

  return $classes;
}
Martin von WP-Stars.com
quelle
+1 danke für den Trick
Vaibhav Gupta
1

Fügen Sie diesen Code in functions.php hinzu

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

}
add_action('wp_head', 'my_function');
Jatinder Kaur
quelle
13
Dies wird innerhalb des <head>nicht ausgegeben <body>.
cjbj
Nun, wp scheint klug genug zu sein, es wird tatsächlich dem Körper hinzugefügt! Wenn es sich um ein Meta handelt, wird es in den Header eingefügt, andernfalls wird es im Body angezeigt.
Mohamed Salem Lamiri
1
Ich glaube, @cjbj ist richtig. Es sieht so aus, als ob es der Browser ist, der es auf den Körper verschiebt, nicht WordPress. Zeigen Sie die Quelle auf einer Seite an, auf der Sie sie in den Kopf eingefügt haben, und dort finden Sie sie.
Gefahr