寻找原因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