The Loop isn't working

时间:2013-08-30 作者:Daniel Sarmas

如果不使用不太推荐的:

<?php query_posts(\'post_type=post&post_status=publish&paged=\'. get_query_var(\'paged\')); ?>
我正在使用一个名为“template blog.php”的自定义页面模板,其中包含以下内容:http://pastebin.com/raw.php?i=9W3akEcX

下面是“content.php”文件:http://pastebin.com/raw.php?i=EH6xhzLQ

使用这个循环,我只得到一篇文章,实际上这是一个我以文章的形式分配了“template blog.php”模板的页面,只有标题,因为我在创建仪表板时没有向其添加任何内容。我上面的代码有什么问题吗?谢谢

2 个回复
SO网友:Charles Clarkson

问题不在于循环不工作。问题是您的代码没有按您希望的方式执行循环。

PHP不符合您的意思。它完全按照你说的做。与大多数计算机语言一样,它只是一个速度极快、愚蠢得令人难以置信的列表处理器。

当您删除query_posts() 调用您需要的其他内容来替换它,以告诉PHP您想要什么。PHP不只是“知道”任何东西。

这里有一个解决方案。在模板文件的底部,替换以下内容:

<!-- START footer -->
<?php get_footer(); ?>
使用此选项:

<!-- START footer -->
<?php

get_footer();

add_action( \'pre_get_posts\', \'wpse_112282_change_query\' );

function wpse_112282_change_query( $query ) {

    if ( $query->is_main_query() ) {

        $paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;

        $query->set( \'post_type\', \'post\' );
        $query->set( \'post_status\', \'publish\' );
        $query->set( \'paged\', $paged );

    }
}
这使用one recommended way 获取$paged 并遵循在query_posts() 呼叫中的第一个参数query_set() 是查询中等号右侧的值(=).

例如post_status=publish 成为:

$query->set( \'post_status\', \'publish\' );

Read more about using the \'pre_get_posts\' action.

SO网友:Daniel Sarmas

我终于解决了这个问题(不必使用<?php query_posts(\'post_type=post&post_status=publish&paged=\'. get_query_var(\'paged\')); ?> ) 通过将“template blog.php”重命名为“home.php”,然后我将要显示我的帖子的页面模板(在我的例子中是“blog”)设置为“Default template”,然后我转到Settings -> Reading 并选择“博客”作为我的帖子页面。

结束

相关推荐

Limit Loop to One Category

我试图将我的循环限制为一个类别。这是循环:<?php $counter = 1; //start counter $grids = 3; //Grids per row global $query_string; //Need this to make pagination work /*Setting up our custom query (In here we are setting it to show 12 posts