寻找原因get_post_meta() 不适用于home.php. 从我的阅读中,我了解到这是一个模板,而不是帖子或页面,根据“Custom fields won\'t display on my blog page“。我通过搜索找到的最接近的页面是”get_post_meta fields don\'t show up on posts page“但遗憾的是,答案并没有详细说明原因。我已经为front_page.php 和所有自定义帖子类型,但不在home.php. 我正在使用条件is_home() 这很有效,但看起来get_the_ID() 没有,代码:
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
}
}
为什么
get_the_ID() 似乎无法使用
get_post_meta() 在里面
home.php 位于
header.php?
编辑:
根据这些评论,我想我会编辑这个问题,以便将来帮助其他人。我正在设置首页和帖子页面Settings -> Reading. 以下内容适用于我的条件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 );
最合适的回答,由SO网友:Milo 整理而成
如果您的帖子页面是在设置>阅读>Front page displays, 然后get_queried_object_id() 将返回可用于获取元数据的页面的ID。
$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 );
SO网友:Pieter Goosen
主页(这适用于博客页以及任何存档页)没有帖子ID,因为它既不是帖子也不是页面。这些是虚拟页面,实际上并不存在,因为它们不是在后端创建的。
get_the_ID() 使用get_post() 使用$post 全局返回帖子或页面的ID。在循环内部$post global将始终设置为循环通过的当前帖子the_post().
在循环外部,在主查询中,在循环之前$post 全局将自动设置并保留查询中第一篇帖子的帖子对象。您可以通过var_dump( $post );. 这个$post 如果在循环运行后选中,则全局将设置为查询中的最后一个帖子(,因为the_post() 已更改值)。
在单帖子页面和真实页面上,第一篇帖子(始终是唯一的帖子)将是被查询的帖子,因此如果不使用query_posts, query_posts 将打破这个填充物,使你在很大程度上符合帖子或页面的正确ID。在任何存档页上,由get_the_ID() 将始终是查询中的第一篇或最后一篇文章,具体取决于它在循环外部的使用位置。
存档页面也不能有帖子元,因为它们不是帖子或页面,也没有ID。
总之,get_the_ID() 将始终返回false (如果$post 任何类型的存档页上循环外的查询中第一篇或最后一篇文章的ID