webentwicklung-frage-antwort-db.com.de

Warum funktioniert get_post_meta nicht mit der Postseite?

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 );
4
Milo

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

2
Pieter Goosen

Um get_post_meta() verwenden zu können, benötigen Sie eine Beitrags-ID. Dies sind Ihre Optionen:

  1. Stellen Sie eine Beitrags-ID manuell ein
  2. Führe deinen Code in der Schleife aus und get_the_ID() normalerweise loop.php
  3. Führe deinen Code in einer einzelnen Seite oder einem Beitrag aus. Normalerweise page.php oder single.php

Erweiterte Antwort unter Verwendung des TwentyFifteen-Themas:

  1. Öffne index.php
  2. Suchen Sie den Schleifencode, der mit while ( have_posts() ) : the_post(); beginnt.
  3. Gib deinen Code nach dem Code in Schritt 2 ein, $meta = get_post_meta( get_the_ID() );
0
Scriptonomy