Vous recherchez une raison pour laquelle get_post_meta()
ne fonctionne pas avec home.php
. D'après mes lectures, je comprends que c'est un modèle et non un message ou une page, mais " Les champs personnalisés ne s'afficheront pas sur la page de mon blog ". La page la plus proche que j'ai pu trouver dans la recherche était " Les champs de get_post_meta n'apparaissent pas sur la page de messages " mais, hélas, la réponse ne donne pas pourquoi. J'ai codé une boîte de méta personnalisée, cela fonctionne, pour le front_page.php
et tous les types de publication personnalisés, mais pas dans home.php
. J'utilise un is_home()
conditionnel et cela fonctionne, mais il semble que get_the_ID()
ne fonctionne pas, le 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
}
}
Pourquoi get_the_ID()
ne semble pas fonctionner avec get_post_meta()
dans home.php
situé dans header.php
?
Modifier:
D'après les commentaires, je pensais pouvoir éditer cette question pour aider quelqu'un d'autre à l'avenir. Je configure la page d'accueil et la page des articles dans Settings -> Reading
. Le ci-dessous a fonctionné dans mon conditionnel pour 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 );
Si votre page de messages est une page statique sélectionnée dans Paramètres> Lecture> La page de garde s'affiche , get_queried_object_id()
renverra l'ID de cette page que vous pouvez utiliser pour récupérer des métadonnées.
$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 );
La page d’accueil ( cela s’applique également à la page de blog de toute page d’archive ) n’a pas d’identifiant de publication, car ce n’est ni une publication, ni une page. Ce sont des pages virtuelles et n’existent pas réellement car elles n’ont pas été créées en back-end.
get_the_ID()
utilise get_post()
qui utilise le $post
global pour renvoyer l'ID d'une publication ou d'une page. À l'intérieur de la boucle, le $post
global sera toujours défini sur la publication en cours de bouclage via the_post()
.
En dehors de la boucle, dans la requête principale, avant la boucle, le $post
global sera automatiquement défini et tiendra l'objet publication de la première publication de la requête. Vous pouvez vérifier cela avec var_dump( $post );
. Le $post
global sera défini sur la dernière publication de la requête s'il est coché après l'exécution de la boucle ( car the_post()
a modifié la valeur ).
Sur les pages à publication unique et les pages vraies, la première publication ( qui sera toujours la seule publication ) sera la publication demandée. L'ID de publication sera donc toujours ( si vous n'utilisez pas query_posts
, query_posts
rompra ce bourrage vous gros temps ) correspond avec l'ID correct de la publication ou de la page. Sur toute page d'archive, l'ID de message renvoyé par get_the_ID()
sera toujours le premier ou le dernier message de la requête, en fonction de son utilisation en dehors de la boucle.
Les pages d'archives ne peuvent pas non plus avoir de méta de publication, car ce ne sont ni des publications ni des pages et elles ne possèdent pas d'identifiant.
Donc, en bref, get_the_ID()
retournera toujours false
( si $post
doit être vide ), ou l'ID de la première ou de la dernière publication de la requête en dehors de la boucle sur n'importe quel type de page d'archive
Pour utiliser get_post_meta()
, vous devez avoir un identifiant de publication. Ce sont vos options:
get_the_ID()
habituellement loop.php Réponse élargie avec le thème TwentyFifteen:
while ( have_posts() ) : the_post();
$meta = get_post_meta( get_the_ID() );