为什么GET_POST_META不适用于帖子页面?

时间:2015-11-10 作者:DᴀʀᴛʜVᴀᴅᴇʀ

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

3 个回复
最合适的回答,由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

SO网友:Scriptonomy

为了使用get_post_meta() 您需要有帖子id。以下是您的选项:

手动设置帖子id,并在循环中运行代码get_the_ID() 通常循环。php在一个页面中运行您的代码,或者通常在一个页面上发布您的代码。php或单个。php使用二十一五主题展开答案:

打开索引。php定位循环代码,以while ( have_posts() ) : the_post();$meta = get_post_meta( get_the_ID() );

相关推荐

保存Metabox内容无效

我正在尝试保存一个metabox输入,但它似乎不起作用。我使用的是数组(因为我需要我的metabox有60行),所以我假设问题就出在数组中。这是我为管理员提供的metabox函数(它可以正确显示我要显示的信息):function mock_metabox() { global $post; // Nonce field wp_nonce_field( basename( __FILE__ ), \'mock_fields\' ); // in