Getting page ID inside loop

时间:2014-05-15 作者:Sodbileg Gansukh

我有一个页面模板,它有一个循环来显示博客帖子。在回路内部get_template_part(\'content\', \'custom\') 函数包含显示博客文章内容的模板(content custom.php)。是否可以在其中获取当前页面IDcontent-custom.php 文件

4 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

您可以使用所有template tags 在这个文件中,要获取ID,只需使用get_the_ID() (或the_ID() 输出)。

get_the_ID() 将检索当前帖子的数字ID。它没有参数,返回当前帖子的ID。

the_ID() 将显示当前帖子的数字ID。它也没有参数。

如果要访问包含自定义循环的页面ID,可以按如下方式执行:

解决方案1(使用全局变量很简单,但不是很好)

在页面模板中:

<?php
    global $parent_page_id;
    $parent_page_id = get_the_ID();
    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
    $args = array( \'post_type\' => \'post\', \'paged\' => $paged );
    $temp = $wp_query;
    $wp_query = null;
    $wp_query = new WP_Query( $args );
    $wp_query->query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    <?php get_template_part( \'content\', \'custom\' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

<?php else : ?>
    <?php get_template_part( \'no-results\', \'index\' ); ?>
<?php endif; ?>
在您的帖子内容模板中:

...
global $parent_page_id; // now you can use parent_page_template variable
...
解决方案2(自定义查询的更好方式)在页面模板中:

<?php
    $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
    $args = array( \'post_type\' => \'post\', \'paged\' => $paged );
    $my_custom_query = new WP_Query( $args );
?>

<?php if ( $my_custom_query->have_posts() ) : ?>
    <?php while ( $my_custom_query->have_posts() ) : $my_custom_query->the_post(); ?>
    <?php get_template_part( \'content\', \'custom\' ); ?>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>

<?php else : ?>
    <?php get_template_part( \'no-results\', \'index\' ); ?>
<?php endif; ?>
在您的帖子内容模板中:

...
... $wp_query->queried_object_id; // it will contain object queried in original wp_query
...

SO网友:helgatheviking

this answer 你可以使用get_queried_object_id() 法典中还没有,但与get_queried_object()

$page_id = get_queried_object_id();

SO网友:shahpranaf

要获取页面id,可以使用global post。


global $post;
echo "pageid: ".$post->ID;

以上内容将检索当前页面id而不是发布id。

SO网友:MortalViews

Solution 1: (错误的解决方案)

$p = $GLOBALS[\'wp_the_query\']->get_queried_object_id(); 
//$p will be your page id
注意:永远不要使用全局wp\\u the\\u查询对象。

EDIT: 如果您没有篡改全局wp\\u query对象,即:您没有使用query\\u posts()等,那么helgatheviking的解决方案将起作用:代码:

 get_queried_object_id(); 
or 
$GLOBAL[\'wp_query\']->get_queried_object_id();
Solution 2: 就像注释中建议的passatgt一样,您可以在循环外部存储页面id,并在循环内部访问它。在模板零件文件中访问它的范围问题可以通过将其声明为全局来解决。

代码:

//1. in the template file befor the loop 

global $myglobal_page_id;
$mygloba_page_id = get_the_ID();
//you can start the loop here
get_template_part(\'content\', \'custom\');

// 2. in the template part file 

global $myglobal_page_id; //inside the loop or otherwise

//this will have your page_id
Explanation#Solution 1:

进入循环后,全局post对象将设置为当前post。因此,当您调用the\\u ID()、get\\u the\\u ID()(使用get\\u post()函数)时,您将获得当前帖子的ID,而不是主帖子的ID。

因此,您需要访问主wp\\u the\\u query对象(它是用于重置查询ref:wp\\u reset\\u query()的主查询对象的副本),因为它包含您的原始查询。

结束

相关推荐

wp_query inside the_loop

我的循环有这个问题。我正在制作一个将从主查询调用的快捷码。它将显示在\\u循环的首页上。因为某种我无法理解的原因。第二个查询只显示一篇文章,而它应该显示3篇。因此,短代码将出现在页面内容中。在“设置”部分,我将首页设置为“主页”,将博客页面设置为“博客”,但主页不是模板。它是由索引生成的。使用WordPress 2014主题的php页面。因此,在“主页”内容区域,我有一个快捷码,它生成第二个循环,从一个名为“特色”的类别中获取3篇文章。 $featured = new WP_Query( array( \