Nur-Front-End-Version des Init-Hooks?

Lesezeit: 3 Minuten

Benutzeravatar von Drew Baker
Zeichnete Baker

Ich versuche, eine Funktion in mein Thema einzubauen, die darauf angewiesen ist, Dinge zu tun, bevor die Header gesendet werden. Also habe ich mich natürlich so in den Init-Hook eingehakt:

add_action('init', 'my_function');

Aber das Problem ist, dass ich nur möchte, dass my_function ausgeführt wird, wenn der Benutzer nicht auf den Admin-Bereich oder die Anmeldeseite schaut.

Welchen Hook kann ich also verwenden, der nur Front-End ist, aber ausgeführt wird, bevor die Header gesendet werden? Blick auf die API-Referenzscheint es keine zu geben, und offensichtlich funktionieren Bedingungen nicht so früh in der Laufzeit.

Abgesehen davon, dass ich die URL nach /wp-admin/ und /wp-login/ durchsuche (was mir klobig erscheint), kann ich es nicht herausfinden.

Packen Sie die Haken und Funktionen Ihrer Aktion in ein ein if(!is_admin()){}

So etwa:

if(!is_admin()) {
  //Style
  add_action('init', 'style');

  function style()
  {
      wp_enqueue_style('style', THEMEROOT . '/css/your.css');
  }
}

Benutzeravatar von Sarah Lewis
Sarah Lewis

Hier ist, wie ich es mache. Verwendung der wp Aktionshaken ist spät genug, um Zugriff auf die Abfrage und damit auf die Bedingungen zu gewähren, geschieht aber immer noch, bevor die Vorlage eingerichtet ist.

<?php
function my_function() {
    if ( ! is_admin() && ! is_login_page() ) {
        // Enqueue scripts, do theme magic, etc.
    }
}

add_action( 'wp', 'my_function' );

function is_login_page() {
    return in_array($GLOBALS['pagenow'], array('wp-login.php', 'wp-register.php'));
}

Bearbeiten: Ich habe falsch verstanden, was Sie mit Überschriften gemeint haben (ich habe darüber nachgedacht wp_head… in letzter Zeit zu viel Theme-Codierung!). Ich gehe jetzt davon aus, dass Sie versuchen, das zu schlagen send_headers Aktion:

function my_function() {
    if ( 'index.php' == $GLOBALS['pagenow'] ) {
        // Pre-header processing on the front-end
    }
}

add_action( 'wp_loaded', 'my_function' );

Es ist nicht super-elegant, aber zumindest prägnant. Und es scheint wahrscheinlich, dass es weiterhin funktioniertdas ist immer eine gute Nachricht.

  • WP wird aufgerufen, nachdem Header gesendet wurden, daher funktioniert es nicht für das, was ich versuche.

    – Drew Baker

    31. August 2012 um 18:36 Uhr

Hier ist eine gute und coole Lösung, ich hoffe, es wird euch allen gefallen.

function my_func(){
 if ( !is_admin())
 {

 // add code here for show only in front-end or create another function outside this block and call that function here.
 }
 else
 {
 // add code here for show only in admin or create another function outside this block and call that function here.
}}add_action ('init', 'my_func');

das ist alles, benutze und sieh die Magie.

  • is_admin() gibt auch für Ajax-Anforderungen true zurück. Zum Beispiel, wenn Sie dann im Frontend unendlich scrollen is_admin() wird wahr zurückgeben.

    – Nabil Lemsieh

    10. Juni 2020 um 21:37 Uhr


Meine Lösung für nur Front-End (nicht Admin) besteht auch darin, den Referer zu überprüfen, da es einige Ajax-Aufrufe gibt, die auf non verweisen /wp-admin URL-Sequenz und is_admin() ist nicht fixiert. Es scheint, dass er direkt auf dieses Stück URL schaut.

// Skip for admin
if ( is_admin() || ( $_SERVER['HTTP_REFERER'] && strpos( $_SERVER['HTTP_REFERER'], 'wp-admin' ) !== false ) ) {
    return;
}

1387460cookie-checkNur-Front-End-Version des Init-Hooks?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy