WP;在内部循环查询页面时,get_sidebar与get_content不一致

时间:2016-03-01 03:24:56

标签: php wordpress while-loop wp-query

所以我希望这个标题不会让人感到困惑,让我试着把它分解。

我有一个content-page.php文件,其中包含get_content和get_sidebar函数。如果我导航到前端的那个页面,我会看到我的内容和侧边栏。

在home.php页面上,我使用$ the_query = new WP_Query加载一系列页面,然后在该查询中使用循环并在该循环内部调用内容-page.php。

问题在于,如果在home.php页面上加载的页面有侧边栏,由于某种原因,在侧边栏之后没有任何内容加载即。 get_content()不返回任何内容,comments_template()不返回任何内容,等等。

这是标记的(非常)简化版本,主页:

$the_query = new WP_Query( array(
    'post_type' => 'page'));
    $x = 0;
    while ( $the_query->have_posts() ) :
        $the_query->the_post();

        get_template_part( 'content', 'page' );

    $x++;
    endwhile;
wp_reset_query();

内容page.php文件:

<article <?php post_class(); ?>>  
    <header>
      <h1><?php the_title(); ?></h1>
    </header>

    <div class="entry-content">
        <?php include( TEMPLATEPATH . '/sidebar.php'); ?>
        <?php the_content(); ?>
    </div><!-- .entry-content -->
</article><!-- #post-<?php the_ID(); ?> -->

的sidebar.php:

<div id="secondary" class="widget-area" role="complementary">
    <?php do_action( 'before_sidebar' );
    dynamic_sidebar( 'sidebar-1' ); ?>
</div><!-- #secondary .widget-area -->

我有什么明显的遗漏吗?一直在研究这个。一如既往,非常感谢任何帮助。

4 个答案:

答案 0 :(得分:1)

WordPress中有两种类型的常规循环查询:

  1. 主查询,基于HTTP请求设置,
  2. 'sub loops',可以更改主查询。
  3. 由于主查询控制了许多内容,例如“是否有侧边栏?”或“应该使用哪个页面模板?”您只能提交其中一种类型。您不能在子循环内调用单独的侧边栏(或调用单独的页面模板)。为此,您必须重新执行基本的WordPress侧边栏系统。

    我认为,您尝试做的最好的选择就是提供某种动态内容,并将其称为侧边栏。换句话说,WordPress已经决定了第一次调用侧边栏时发生了什么。系统没有一种默认方式来处理一遍又一遍地调用侧边栏。在子循环的每次迭代之后使用短代码或过滤器将是更好的方法。

答案 1 :(得分:0)

关闭“)”打开括号。

$the_query = new WP_Query( array( 'post_type' => 'page') );

答案 2 :(得分:0)

将此代码粘贴到content-page.php

<?php get_template_part( 'sidebar' ); ?>
        <?php the_content(); ?>

尝试删除do_action( 'before_sidebar' );

答案 3 :(得分:0)

你可以尝试:

include( locate_template( 'content-page.php', false, false ) );

而不是:

get_template_part('content', 'page');