get_post_meta gibt NULL im Frontend zurück, aber korrektes Ergebnis im Backend

Ich mache ein benutzerdefiniertes Meta-Feld für Posts.

Im Back-End funktioniert get_post_meta gut und gibt den Wert zurück.

Im Front-End gibt es NULL zurück:

$my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); // NULL echo $my_custom_field // '' 

Dinge, die ich ausprobiert und geprüft habe:

  1. my_custom_field wird mit der entsprechenden post_id in die database geschrieben und alles scheint in Ordnung zu sein.

  2. Die Verwendung der fest codierten Post-ID ergibt dasselbe Ergebnis

  3. Wenn Sie den Anruf in die Schleife eingeben, erhalten Sie das gleiche Ergebnis

FRAGE: Warum gibt get_post_meta NULL zurück, wie holt man den tatsächlichen Wert?

EDIT: Das Feld ist genau dort in der database:

 meta_id post_id meta_key meta_value

139 87 my_custom_field IT funktioniert!

Die functionsargumente verweisen auf korrekte post_id und meta_key, die ich mehrfach überprüft habe, einschließlich der harten Codierung der Argumente.

Ich habe auch versucht, den Namen des meta_key zu ändern, wie in einer anderen Antwort vorgeschlagen – hat nicht funktioniert.

Backend-Code ist im Grunde dieses Tutorial https://www.smashingmagazine.com/2011/10/create-custom-post-meta-boxes-wordpress/

EDIT 2:

Keine Fehler in meinen Protokollen.

Hier ist der vollständige Front-End-Code, der NULL anstelle des erwarteten Werts zurückgibt:

 add_action( 'the_post', 'output_my_custom_field'); function output_my_custom_field() { $post_id = get_the_ID(); if ( !empty( $post_id ) ) { $my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); } } 

EDIT 3: Unabhängig von dem verwendeten Haken (ich habe verschiedene versucht) oder sogar eine function ohne irgendwelche Haken aufrufen – es gibt immer noch NULL zurück.

Solutions Collecting From Web of "get_post_meta gibt NULL im Frontend zurück, aber korrektes Ergebnis im Backend"

Nicht 100% sicher, dass ich die Frage oder das Problem verstehe, aber das sollte funktionieren, denke ich:

 add_action( 'the_post', 'output_my_custom_field'); function output_my_custom_field( $post_object ) { $post_id = $post_object->ID; // why the conditional (and redundant !empty) ? // if ( !empty($post_id) ) ) { $my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); // see above // } } 

In einem functionskontext kann output_my_custom_field() das Schablonentag wie get_the_ID() nicht verwenden und gibt null zurück. In einer function müssen externe Daten über die functionsparameter output_my_custom_field($post) oder mit global global $post .

Wenn the_post Aktion ” the_post , müssen Sie der function den Parameter $post_object hinzufügen. Siehe das the_post Beispiel

the_post nur den Post-Index in der Schleife. Wenn Sie einen benutzerdefinierten the_content anzeigen möchten, können Sie the_content oder einen the_content erstellen.

Eine einfache Möglichkeit, das benutzerdefinierte Feld vor dem Inhalt zurückzugeben.

 add_filter( 'the_content', 'output_my_custom_field'); function output_my_custom_field($content) { global $post; $post_id = $post->ID; $post_title = $post->post_title; if ( !empty( $post_id ) ) { $my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); $content = $my_custom_field . $content; } return $content; } 

Wenn Sie das Schablonen-Tag in Ihrer function verwenden möchten, müssen Sie setup_postdata( $post ); .

  add_filter( 'the_content', 'output_my_custom_field'); function output_my_custom_field($content) { global $post; setup_postdata($post); $post_id = get_the_ID(); if ( !empty( $post_id ) ) { $my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); wp_reset_postdata(); } return $content; } 

In diesem Fall müssen die Post-Daten nicht mit wp_reset_postdata() , da diese function die ursprüngliche Abfrage wiederherstellt (und auf derselben ausgeführt wird).

Ich hoffe, es hilft, damit es funktioniert!

Dies ist eher ein Kommentar als eine Antwort, aber ich kann nicht “kommentieren”.

Haben Sie die Posts überprüft, von denen Sie versuchen, diese Informationen abzurufen?

Sind die Beiträge als privat markiert (nur Admin) oder nicht veröffentlicht?

Versuchen Sie, ein anderes WordPress-Konto mit eingeschränktem Zugriff zu erstellen (aber höhere Rechte als ein normaler Benutzer) und sehen Sie, ob es funktioniert.

Es ist nur das Haken-Problem, das du mit ‘the_post’ verwendest, versuche ein anderes, das hier passt, wie ich es gerade mit ‘init’ versucht habe und es funktioniert gut.

 add_action( 'init', 'output_my_custom_field'); function output_my_custom_field() { $post_id = get_the_ID(); if ( !empty( $post_id ) ) { $my_custom_field = get_post_meta( $post_id, 'my_custom_field', true ); var_dump($my_custom_field); } } 

Versuchen:

 $my_custom_field = get_post_meta( $post_id, 'my_custom_field', false ); var_dump($my_custom_field); 

Es könnte sein, dass Sie das Meta-Feld mit der falschen Version von add_post_meta( $post_id, 'my_custom_field', 'IT works!', false )