Get the ID after WP_Query

时间:2014-10-23 作者:myol

我使用WP\\u查询来查找具有特定条件的帖子,并在其中循环执行操作。我在循环中获取post id并将其分配给一个变量$i 在上执行功能。

在我使用循环之前get_the_id() 并正确显示我所在的自定义贴子页面ID。循环之后,我再次使用它,但这次它找到了我搜索的帖子的id。

为什么会发生这种情况

function display_meta_box( $category ) 
{
    if (in_array(\'case_studies\', get_post_types()))
    {

//get_the_id() - works fine here

        $combo_case_studies = esc_html( get_post_meta( $category->ID, \'cat\', true ) ); 

        $args = array( \'post_type\' => \'case_studies\');  
        $loop = new WP_Query( $args );
        $i = \'\';

        while ( $loop->have_posts() ) : $loop->the_post();

            if ($combo_case_studies == get_the_title()) 
            {
                $i = get_the_id(); // correct?
            }

        endwhile;

...do stuff using $i...

//get_the_id() - gets a different ID

    }
}
我正在考虑在当前的实现中取消$I,而是这样做,但它仍然提出了一个问题:我是否正确地执行了这个循环?为什么页面ID在循环之后仍然不同?

function display_meta_box( $category ) 
{
        if (in_array(\'case_studies\', get_post_types()))
        {

        $orig_i = get_the_id()


        ...loop stuff...


        ...use $orig_i keeping the ID from the get_the_id() before the loop...

        }
}

2 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

如果需要从当前页面获取ID,应使用get_queried_object_id() 将返回当前查询对象的ID。

的新实例WP_Query 更改$post 全局变量,这就是为什么在循环之后,如果var_dump($post);

这就是重置如此重要的原因all 的新实例WP_Query 因为它确实改变了变量。为此,只需添加wp_reset_postdata(); 自定义循环之后

记住,如果您需要计数器,有一个内置循环计数器,$current_post 您可以通过$loop->current_post. 记住,这个计数器从0

SO网友:Hakkim

尝试<?php wp_reset_query(); ?> 在while循环之后,这将重置自定义查询数据,以便您可以检索实际的帖子/页面数据。

结束

相关推荐