get_the_ID () kündigt auf der 404-Seite an

6

Ich verwende get_the_ID () in meiner Aktion wp_enqueue_scripts aufgrund einiger Anforderungen. Als Ergebnis erhalte ich jedoch den folgenden Hinweis (wp-debug ist aktiviert):

Hinweis: Der Versuch, die Eigenschaft eines Nichtobjekts in C: \ wamp \ www \ WordPress \ wp-Includes \ post-template.php in Zeile 29 abzurufen

Ich weiß, warum das passiert. Meine Frage ist, warum das passieren soll. Soll WordPress nicht wissen, dass 404 kein $ post zugewiesen ist, und ein leeres Ergebnis zurückgeben?

Muss ich verwenden:

if( !is_object($post) ) return;

Überall, wo ich get_the_ID () benutze, um diesen Hinweis loszuwerden?

Metallzade
quelle

Antworten:

7

get_the_ID() ist kaputt.

function get_the_ID() {
    return get_post()->ID;
}

Es wird versucht, das Element IDfür eine Funktion zu verwenden, die manchmal ein postObjekt zurückgibt :

/* 
 * @return WP_Post|null WP_Post on success or null on failure
 */
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {

get_posts()kann zurückkehren NULLund NULLhat kein Mitglied ID, da es kein Objekt ist.

Auf posteiner 404-Seite befindet sich kein globales Objekt. Und da $postes sich um eine globale Variable handelt, kann sie überall entfernt werden, auch auf einzelnen Seiten.

Wann immer Sie verwenden get_the_ID(), müssen Sie auf ein postObjekt testen .

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}

Hier gibt es zwei Lektionen zu lernen:

  1. Vertraue niemals der WordPress API. Lesen Sie den Code und verstehen Sie seine Einschränkungen.
  2. Vermeiden Sie globale Variablen in Ihrem eigenen Code. Behandeln Sie jeden als schwerwiegenden Fehler und beseitigen Sie ihn sofort.
Fuxia
quelle
Ich hatte auch eine Reihe von Warnungen auf 404 Seiten, die sich alle auf das $ post-Objekt bezogen. Ist es besser, eine Funktion wie pastebin.com/EwEZAQzi an Orten zu erstellen und zu verwenden, an denen dies sinnvoll ist? Mein Hauptproblem ist, dass ich das Post-Objekt verwende, um lokalisierte JS-Variablen (unter Verwendung von Post-Meta) in functions.php zu erstellen, die immer noch auf einer 404-Seite ausgeführt werden.
Tim
@Tim Führen Sie Ihr Skript einfach nicht auf 404 Seiten aus. Überprüfen is_singular()Sie, ob Sie das Skript in die Warteschlange stellen.
Fuxia
0

Sie können überprüfen, ob Sie sich auf einer 404-Seite befinden:

if( is_404() ) {
    return;
}
get_the_ID();
// ...

Referenz

is_404()

Pat J.
quelle
WordPress hat in der Tat eine ganze Reihe von bedingten Tags .
Pat J