Get_post_meta()从页面上的特定帖子检索元数据,而不是当前查看的页面

时间:2013-11-17 作者:Bojana Šekeljić

我正在制作一个简单的边栏功能,在边栏中显示嵌入的视频。我已经创建了一个元字段,管理员应该在其中粘贴嵌入的视频。它在帖子上正常工作,但在页面上,get_the_ID() 总是返回相同的ID,145,其中一个帖子的ID。

以下是我使用的代码:

<?php 
    $id = get_the_ID();
    $video_value = get_post_meta($id, \'_post_video\', true);
    if (! empty($video_value)) {
        echo $video_value;
        echo get_the_ID();
    } else {
        echo \'no video to show\';
        echo get_the_ID();
    }
?> 
我有点困惑,所以如果有人能解释一下。。。谢谢

3 个回复
最合适的回答,由SO网友:fuxia 整理而成

还有其他一些查询替换了主帖子ID。可能是另一个小部件、一些奇怪的插件代码或其他东西。如果您无法控制上下文,请提前收集帖子ID:

add_action( \'template_redirect\', \'collect_post_id\' );

function collect_post_id()
{
    static $id = 0;

    if ( \'template_redirect\' === current_filter() && is_singular() )
        $id = get_the_ID();

    return $id;
}
而不是get_the_ID() 使用collect_post_id() 现在在您的代码中。

$video_value = get_post_meta( collect_post_id(), \'_post_video\', true );

SO网友:gmazzap

get_the_ID 打算使用within 循环。

抄本:

此标记必须位于循环中。

使用:

$id = get_queried_object_ID();
请参见here 对于文档。

SO网友:Mark Kaplun

在站点代码的某个地方有一个服装查询循环,完成后不会重置主循环参数。正确的做法是找到它并打电话wp_reset_query() 当它完成时,另一种方法是在代码的开头调用它

wp_reset_query()
$id = get_the_ID();
$video_value = get_post_meta($id, \'_post_video\', true);
...

结束

相关推荐

Get_Pages-显示子页,然后显示孙页

我有一个这样的页面结构。 Portfolio - Residential - - Resident 1 - - Resident 2 - - Resident 3 - Commercial - - Commercial 1 - - Commercial 2 - - Commercial 3 孙辈页面居民1-商业3有帖子缩略图我有一个投资组合页面的模板,我想在其中显