从第一部分开始,这里有几个问题:
<?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”的页面,进入“设置”,然后在“阅读”下,将其设置为您的帖子页面:
然后,创建
frontpage.php
和a
home.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等