将第二个循环添加到WordPress主题的单独页面上

5
我正在尝试在两个不同的页面上添加两个循环:主页和博客。博客基本上是帖子的索引。它是大多数WordPress页面默认的主页。为了实现这一点,我进入“阅读设置”,将“主页显示”设置为“静态”,并将“主页”设置为我在WordPress页面中设置的主页,“帖子页面”设置为博客页面。
现在问题是当我在主页添加循环时,它不起作用,可能是因为我将帖子页面设置为不同的页面。
那么,我该如何让循环在主页和博客页面上工作?顺便说一下,主页循环只是文章标题+日期+摘录。我需要完全重新设计主题还是WordPress下不可能实现这一点?
哦,我使用的循环是:
<?php if(have_posts()) : ?>
        <?php while(have_posts()) : the_post() ?>
2个回答

5

至少有三种方法可以在WordPress中运行自定义查询。

query_posts()可以定义第二个循环的查询字符串。这很容易且非常普遍。以下代码是我从query_posts()的codex页面复制的基本结构:

//The Query
query_posts('posts_per_page=5');

//The Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
 ..
endwhile; else:
 ..
endif;

//Reset Query
wp_reset_query();

您也可以使用类似的 get_posts() 函数。

<ul>
 <?php
 global $post;
 $myposts = get_posts('numberposts=5&offset=1&category=1');
 foreach($myposts as $post) :
   setup_postdata($post);
 ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 <?php endforeach; ?>
 </ul> 

这两个函数都接受多个参数,详细信息请参见query_posts函数参考页面。上面显示的参数仅为示例。可用参数列表很长。

第三种方法是实例化WordPress Query object(WP的主查询方法)的另一个实例。Query_posts和get_posts在WordPress运行默认wp_query后都会运行第二个对数据库的调用。如果您非常关心性能或减少数据库访问次数,建议学习如何与wp_query交互,在其运行之前修改默认查询。wp_query类提供了许多简单的方法来修改查询。

祝好运!


谢谢您的回复。我是WordPress的新手,不知道在哪里可以放置那段代码,因为现在index.php文件通过阅读设置与“博客”页面链接在一起。如果我错了,请纠正我,但是您不能只是把第二个循环的php代码放在静态WP页面的中间吧? - Ben Moseley
你的主题中应该有一个名为'page.php'的文件。除非你复制并重命名它,并在文件中更改模板名称,即/*template name: xxxxxxx/*,否则它就是静态页面模板。将我的代码放在那个文件中,或者你创建并用作主页模板的文件中。如果你创建了一个备用页面模板文件,请确保通过编辑WP管理区域中的页面并在编辑页面屏幕右侧通常的页面模板下拉菜单中选择你的文件来将其设置为主页模板。 - kevtrout
这样做不会让它出现在每个静态页面上吗?只有主页才对吧? - Ben Moseley
1
如果您有其他使用page.php模板的WordPress页面,请复制该文件并将其重命名。另外,在该文件中,您将看到“/Template Name: page template/”靠近顶部。“页面模板”可能是其他内容。将名称更改为唯一名称。然后,通过将页面模板更改为您创建的模板,在管理区域编辑要在其上显示自定义循环的WordPress页面。在右列中,您将看到一个下拉选择框以选择页面模板。您将看到您的自定义模板列表。选择它并保存。现在第二个循环将仅出现在该页面上。 - kevtrout
好的,谢谢。我甚至不知道有模板这回事。最终我使用了front-page.php,因为根据我的阅读设置,它实际上是我的主页默认的模板。至于循环,我使用了“new WP_query()”,现在它完美地工作了。感谢您指引我正确的方向。 - Ben Moseley

0

可能WordPress不会为您启动循环,因为您使用了静态页面。但是,如果此静态页面在您的主题中定义(因为您包含用于显示循环的PHP代码,我认为它是),您始终可以自己在那里启动新的循环。只需自己调用query_posts,您的代码就应该开始工作。


嗨,谢谢回复。最终我使用了“new WP_query”,因为它是一个嵌套循环,并使用了默认的front-page.php模板。 - Ben Moseley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接