为什么我的wp_Query不起作用?

时间:2018-12-12 作者:sh.dehnavi

我想显示帖子类型的帖子存档post. 所以我创建了一个page template 并插入以下代码,但我不显示任何内容。why? what should i do?

<?php 
    $postnumcat = new wp_query (array(
    \'post_status\' => \'publish\',
    \'post_type\' => \'post\',
    \'cat\' => \'-1\',
    \'posts_per_page\' => \'-1\',
    ));
?>

<?php if($postnumcat->have_posts()) :
while($postnumcat->have_posts()) : $postnumcat->the_post(); ?>

    the_title();
    the_content();

<?php endwhile; endif; wp_reset_query(); ?>  
连我都推杆了<?php wp_reset_postdata(); ?> 之后endwhile 像这样:

<?php endwhile; wp_reset_postdata(); endif; wp_reset_query(); ?>   
即便如此:

<?php endwhile; wp_reset_postdata(); endif; ?> 
但它也没有显示任何内容:|

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

从第一部分开始,这里有几个问题:

<?php 
    $postnumcat = new wp_query (array(
    \'post_status\' => \'publish\',
    \'post_type\' => \'post\',
    \'cat\' => \'-1\',
    \'posts_per_page\' => \'-1\',
    ));
首先,wp_query 是拼错的,是WP_Query

还有一些一般注意事项:

设置posts_per_page-1 对性能不利。即使你不希望有很多帖子,也可以设置一个超高的数字,但千万不要说-1 因为这意味着不受限制,即使您的服务器无法处理它。如果结果太多,请使用分页设置cat-1 告诉WP排除带有术语的类别-1, 这可能是非常缓慢和昂贵的。不惜一切代价避免此类查询然后出于某种原因,有一个结束的PHP标记、一个空格和换行符,然后是一个开始的PHP标记,这将创建不需要的空格:

?>

<?php if($postnumcat->have_posts()) :
然后是循环,它的格式不正确,但请注意there is nothing inside the loop, 你只会得到一系列<!-- Loop elements -->. 代码需要实际显示内容

while($postnumcat->have_posts()) : $postnumcat->the_post(); ?>

<!-- Loop elements -->

<?php endwhile; endif; wp_reset_query(); ?>  
最后,wp_reset_query 用于query_posts, 永远不要使用的函数。黑名单wp_reset_query 永远不要使用它,你没有理由使用它。

相反,让我们回到原来的任务:

我想为帖子类型显示帖子存档。因此,我创建了一个页面模板并插入了以下代码,但什么也没有显示。为什么?我该怎么办?

WordPress已经做到了!默认情况下,这是您的主页(home.php/archive.php/index.php ). 但是,如果您想将此存档放在另一个页面上,那么使用页面模板然后丢弃主查询并使用自己的查询是一种糟糕的做法。

想象一下,你每天早上让你的助手给你买咖啡。除了她40分钟的往返旅行回来后,你告诉他们“不,我要一块热巧克力”。每天早上你让他们出去两次。然后,客户抱怨您的业务进展缓慢,表现不佳。

除此之外,您刚刚失去了WP的许多好处,例如分页将中断,您需要重新实现它以使其重新工作。

Instead, 创建一个名为“Post Archive”的页面,进入“设置”,然后在“阅读”下,将其设置为您的帖子页面:

enter image description here

然后,创建frontpage.php 和ahome.php 在您的主题中,这样您就可以同时为它们设置样式。在两者中使用正常、标准、主post循环。

作为参考,这是一个标准的主回路:

if ( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        the_title();
        the_content();
    }
} else {
    // no posts found
}
这是一个自定义post查询:

$q = new WP_Query( [
    // args go here
]);
if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        the_title();
        the_content();
    }
    wp_reset_postdata();
} else {
    // no posts found
}
如果你想修改WordPress获取的帖子,你应该这样做,在它获取之前告诉它:

function my_home_category( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        // only show posts from category 123 on the homepage
        $query->set( \'cat\', \'123\' );
    }
}
add_action( \'pre_get_posts\', \'my_home_category\' );
最后,把每件事都放在自己的行上,并缩进它们。有很多免费编辑器会自动为您执行此操作,例如Sublime Text、VS Code、Atom等

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post