我使用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...
}
}
最合适的回答,由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