Nach einem Grund suchen, warum get_post_meta()
nicht mit home.php
zusammenarbeitet. Aus meiner Lektüre geht hervor, dass es sich um eine Vorlage und nicht um einen Beitrag oder eine Seite handelt. " Benutzerdefinierte Felder werden auf meiner Blogseite nicht angezeigt ". Die nächstgelegene Seite, die ich bei der Suche finden konnte, war " get_post_meta Felder werden auf der Postseite nicht angezeigt ", aber leider geht die Antwort nicht ins Detail, warum. Ich habe eine benutzerdefinierte Meta-Box codiert, sie funktioniert für den front_page.php
und alle benutzerdefinierten Beitragstypen, jedoch nicht innerhalb von home.php
. Ich verwende eine bedingte is_home()
und es funktioniert, aber es scheint, dass get_the_ID()
den Code nicht tut:
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
zu funktionieren, der sich in header.php
befindet?
Bearbeiten:
Nach den Kommentaren dachte ich, ich würde diese Frage bearbeiten, um jemand anderem in Zukunft zu helfen. Ich stelle die Startseite und die Beitragsseite in Settings -> Reading
ein. Das Folgende funktionierte unter meinen Bedingungen 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 );
Wenn Ihre Posts-Seite eine statische Seite ist, die unter "Einstellungen"> "Lesen"> " Anzeigen der Startseite" "ausgewählt wurde, gibt get_queried_object_id()
die ID für diese Seite zurück, mit der Sie Metadaten abrufen 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 ( das gilt auch für die Blogseite jeder Archivseite ) hat keine Beitrags-ID, da es sich weder um einen Beitrag noch um eine Seite handelt. Hierbei handelt es sich um virtuelle Seiten, die nicht vorhanden sind, da sie nicht im Back-End erstellt wurden.
get_the_ID()
verwendet get_post()
, das den globalen $post
verwendet, um die ID eines Posts oder einer Seite zurückzugeben. Innerhalb der Schleife wird der $post
global immer auf den aktuellen Beitrag gesetzt, der durch the_post()
durchgeschleift wird.
Außerhalb der Schleife wird in der Hauptabfrage vor der Schleife automatisch der $post
global gesetzt und enthält das Beitragsobjekt des ersten Beitrags in der Abfrage. Sie können dies mit var_dump( $post );
überprüfen. Der $post
global wird auf den letzten Beitrag in der Abfrage gesetzt, wenn dies nach dem Ausführen der Schleife überprüft wird ( weil the_post()
den Wert geändert hat ).
Auf einzelnen Postseiten und True Pages ist der erste Post ( das wird immer der einzige Post sein ) der abgefragte Post, daher wird die Post-ID immer ( wenn Sie nicht query_posts
verwenden , query_posts
wird diese Füllung brechen ) entspricht der korrekten ID des Beitrags oder der Seite. Auf jeder Archivseite ist die von get_the_ID()
zurückgegebene Beitrags-ID immer der erste oder letzte Beitrag in der Abfrage, je nachdem, wo er außerhalb der Schleife verwendet wird.
Archivseiten können auch kein Post-Meta haben, da es sich nicht um Posts oder Seiten handelt und sie keine IDs haben.
Kurz gesagt, get_the_ID()
gibt immer false
( wenn $post
jemals leer sein soll ) oder die ID des ersten oder letzten Posts in der Abfrage außerhalb der Schleife auf einem beliebigen Archivseitentyp zurück
Um get_post_meta()
verwenden zu können, benötigen Sie eine Beitrags-ID. Dies sind Ihre Optionen:
get_the_ID()
normalerweise loop.php Erweiterte Antwort unter Verwendung des TwentyFifteen-Themas:
while ( have_posts() ) : the_post();
beginnt.$meta = get_post_meta( get_the_ID() );