wake-up-neo.com

is_front_page funktioniert nur in Themendateien und nicht in functions.php

Wenn ich is_front_page () in meiner front-page.php-Datei verwende, funktioniert es wie erwartet. Wenn ich jedoch dieselbe Funktion in meiner theme functions.php-Datei verwende, funktioniert dies nicht. Ist das normales Verhalten? Wenn nicht, kann es irgendwie Ärger geben?

In den Einstellungen-> Lesen habe ich meine Startseite auf eine Seite namens "Startseite" eingestellt, so dass ich denke, dass alles eingestellt ist.

EDIT

das Hinzufügen des Folgenden zu functions.php funktioniert nicht, ich verspreche jedoch, dass es wie erwartet funktioniert, wenn ich is_home_page () zu meiner header.php-Datei hinzufüge

add_action('init', 'my_test');

function my_test(){
    if(is_front_page())
        echo 'is it?';
}
4
Mike

Dies kann normal sein, abhängig davon, wie genau Sie is_front_page in Ihrer Funktionsdatei verwenden.

Wenn Sie es innerhalb des globalen Bereichs von functions.php verwenden, funktioniert es nicht.

Warum? Weil WordPress functions.php lädt, bevor der $wp_query object mit der aktuellen Seite eingerichtet wurde. is_front_page ist ein Wrapper um $wp_query->is_front_page(), und wenn die Abfrage nicht eingerichtet wurde, wird immer false zurückgegeben (oder eine Warnung ausgegeben, wenn wp_debug aktiviert ist.

Aus dem Kodex:

Warnung: Sie können bedingte Abfragetags nur nach dem Init-Aktions-Hook in WordPress verwenden. Für Themes bedeutet dies, dass das bedingte Tag niemals richtig funktioniert, wenn Sie es im Hauptteil von functions.php verwenden, d. H. Außerhalb einer Funktion.

http://codex.wordpress.org/Conditional_Tags

5
chrisguitarguy

Das Codex-Zitat von chrisguitarguy ist nicht mehr gültig !! Es wurde aktualisiert auf:

Warnung: Sie können nur bedingte Abfrage-Tags verwenden nach dem Aktions-Hook posts_selection in WordPress ( der Aktions-Hook wp ist der erste, über den Sie diese Bedingungen verwenden können ). Für Themes bedeutet dies, dass das bedingte Tag niemals richtig funktioniert, wenn Sie es im Hauptteil von functions.php verwenden, d. H. Außerhalb einer Funktion.

Somit funktioniert der init -Hook nicht mehr !!! Wie bereits erwähnt, ist der Hook wp der erste Hook, den Sie verwenden können, wenn Sie bedingte Abfragetags verwenden möchten. Um bedingte Tags zum Laufen zu bringen, ist hier das minimale Boilerplate:

add_action('wp', 'function_that_uses_conditional_tags');

function function_that_uses_conditional_tags() {
    // place code here
}

Beachten Sie jedoch, dass diese "Warnung" zwar für bedingte Tags allgemein anwendbar zu sein scheint, wie es in der Einleitung der Codex-Seite zu Bedingte Tags steht, jedoch nicht betont wird, dass sie wirklich nur für das Frontend gilt.

Der wp Hook wird nicht einmal im Backend ausgelöst! Wenn Sie es also zum Beispiel mit is_admin () verwenden, wird es nie zu true ausgewertet. Verwenden Sie in diesem Fall einen anderen Haken. Tatsächlich funktioniert init gut für is_admin ();).

5
Stephen Miller

Die früheren Hooks, an denen template_tags arbeiten, sind wp action hook. Alle Hooks davor wie der Hook init funktionieren nicht für Template-Tags wie is_front_page ()

1
chifliiiii