Warum funktioniert get_post_meta nicht mit der Posts-Seite?

Auf der Suche nach einem Grund, warum get_post_meta() nicht mit home.php . Aus meiner Lektüre verstehe ich, dass es sich um eine Vorlage handelt und nicht um einen Beitrag oder eine Seite, da ” Benutzerdefinierte Felder auf meiner Blogseite nicht angezeigt werden “. Die nächste Seite, die ich bei der Suche gefunden habe, war ” get_post_meta Felder werden nicht auf der Posts-Seite angezeigt “, aber die Antwort geht nicht ins Detail. Ich habe eine benutzerdefinierte Meta-Box, es funktioniert, für die front_page.php und alle benutzerdefinierten Post-Typen, aber nicht in home.php . Ich benutze eine bedingte is_home() und es funktioniert, aber es scheint, get_the_ID() nicht, der Code:

 if ( is_home() ) { // variables $check_meta = get_post_meta( get_the_ID(), 'checkbox', true ); $header_meta = get_post_meta( get_the_ID(), 'header', true ); $textarea_meta = get_post_meta( get_the_ID(), 'textarea', true ); // condition if ( ( $check_meta == 'yes' ) && !empty( $textarea_meta ) && !empty( $header_meta ) ) { // code } } 

Warum scheint get_the_ID() nicht mit get_post_meta() in home.php in header.php ?


Bearbeiten:

Per den Kommentaren dachte ich, ich würde diese Frage bearbeiten, um jemand anderen in der Zukunft zu helfen. Ich stelle die Titelseite und die Postseite unter Settings -> Reading . Das Folgende funktionierte in meiner Bedingung für is_home() :

 $check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true ); $header_meta = get_post_meta( get_queried_object_id(), 'header', true ); $textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true ); 

Solutions Collecting From Web of "Warum funktioniert get_post_meta nicht mit der Posts-Seite?"

Wenn Ihre Posts-Seite eine statische Seite ist, die unter Einstellungen> Lesen> Startseite angezeigt wird , gibt get_queried_object_id() die ID für diese Seite zurück, die Sie zum Abrufen von Metadaten verwenden können.

 $check_meta = get_post_meta( get_queried_object_id(), 'checkbox', true ); $header_meta = get_post_meta( get_queried_object_id(), 'header', true ); $textarea_meta = get_post_meta( get_queried_object_id(), 'textarea', true ); 

Die Homepage ( dies gilt auch für die Blogseite jeder Archivseite ) hat keine Post-ID, da es sich weder um eine Post noch um eine Seite handelt. Dies sind virtuelle Seiten und existieren nicht wirklich, da sie nicht im Backend erstellt wurden.

get_the_ID() verwendet get_post() , das $post global verwendet, um die ID eines get_post() oder einer Seite zurückzugeben. Innerhalb der Schleife wird $post global immer auf den aktuellen Post gesetzt, der durch the_post() .

Außerhalb der Schleife wird in der Hauptabfrage vor der Schleife automatisch $post global gesetzt und das Post-Objekt des ersten Posts in der Abfrage gehalten. Sie können dies mit var_dump( $post ); überprüfen var_dump( $post ); . $post global wird auf den letzten Post in der Abfrage gesetzt, wenn das the_post() nach dem Ausführen der Schleife gesetzt ist ( weil the_post() den Wert geändert hat ).

Auf einzelnen Post-Seiten und echten Seiten wird der erste Post ( der immer der einzige Post sein wird ) der Post sein, der abgefragt wurde, so dass die Post-ID immer ( wenn du nicht query_posts , query_posts ) entsprechen der korrekten ID des Posts oder der Seite. Auf jeder Archivseite ist die von get_the_ID() Post-ID immer der erste oder letzte Post in der Abfrage, abhängig davon, wo sie außerhalb der Schleife verwendet wird.

Archivseiten können auch kein Post-Meta haben, da sie keine Posts oder Seiten sind und keine IDs haben.

Kurz gesagt, get_the_ID() immer false ( wenn $post jemals leer sein soll ) oder die ID des ersten oder letzten Posts in der Abfrage außerhalb der Schleife auf jeder Art von Archivseite

Um get_post_meta() , benötigen Sie eine Post-ID. Dies sind Ihre Möglichkeiten:

  1. Legen Sie eine Post-ID manuell fest
  2. Führen Sie Ihren Code in der Schleife und get_the_ID() Regel loop.php
  3. Führen Sie Ihren Code auf einer einzigen Seite aus oder posten Sie normalerweise page.php oder single.php

Erweitern Antwort mit TwentyFifteen Thema:

  1. Öffnen Sie index.php
  2. Suchen Sie den Schleifencode, der mit while ( have_posts() ) : the_post();
  3. Fügen Sie Ihren Code nach dem Code in Schritt 2 ein, $meta = get_post_meta( get_the_ID() );