wordpress 如何检查当前页面是否应该显示多个 post 或单个 post?

How wordpress checks to see if the current page is supposed to display multiple posts or a single post?

需要一些关于 wordpress 基础知识的说明。

我正在尝试创建一个在索引页上显示摘要的博客,单击一下即可显示完整的博客。

我在索引中有以下循环,单击标题会将您带到 post:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<h1><?php the_title(); ?></h1>
<h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title();?></a></h2>

<h4>Posted on <?php the_time('F jS, Y') ?></h4>
<p><?php the_content(__('(more...)')); ?></p>
<hr> <?php endwhile; else: ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>

我不知道这个功能如何,链接如何使用 post 打开新页面。任何人都可以解释它如何检查当前页面是否应该显示多个 post 或单个 post 或页面的列表?

一旦我有了这个,我将专注于打开完整 post 的索引页面上的摘要。

如您所述,您提供的代码来自 index.php 文件。这通常最终成为主页或管理员发布的所有 articles/pages 列表。

显示完整内容的个人 posts/pages 是使用不同的模板生成的,通常是 page.phpsingle.php,特定类别的模板除外。

给大家一个运行下来的代码:

<?php 
    if (have_posts()) : while (have_posts()) : the_post(); // Runs the loop and gets post/page data
?> 
<h1>
    <?php the_title(); // Displays the title of the page?>
</h1>
<h2>
    <a href="<?php the_permalink() ?>" rel="bookmark">
        <?php the_title(); // displays the title again but this time with a link to the full story ?>
    </a>
</h2>

<h4>Posted on <?php the_time('F jS, Y'); // this is the current date, not the post date ?></h4>
<p>
    <?php the_content(__('(more...)')); // gets the content up till it see's the more tag ?>
</p>
<hr> 
<?php endwhile; else: ?>
<p>
    <?php _e('Sorry, no posts matched your criteria.'); // error if nothing found ?>
</p>
<?php endif; ?>

page.phpsingle.php 中,它将包含仅显示单个页面的代码,通常具有评论功能以及通常从列表视图中排除的任何其他内容。

您可以在此处查看模板文件的完整列表及其用途:http://codex.wordpress.org/Theme_Development#Template_Files_List

所以仔细看看你的代码:


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

第一个 have_posts() 检查您的博客是否以 post 开头。如果它有 posts 它执行 while。当它有 post 时,它告诉我们获取它遇到的第一个 post。


<h1><?php the_title(); ?></h1>
<h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title();?></a></h2>

从第一行的 post 中获取标题和永久链接。


<h4>Posted on <?php the_time('F jS, Y') ?></h4>

显示博客项目post编辑的日期(格式为 F、JS、Y)。


<p><?php the_content(__('(more...)')); ?></p>

从第一行获取的 post 中获取内容。


<hr> <?php endwhile; else: ?>

如果第一行的 if 语句不再为真,则结束。我将在下面进一步解释。


<p><?php _e('Sorry, no posts matched your criteria.'); ?></p><?php endif; ?>

语句的其他部分。


所以我假设你的问题是关于 while 语句的,因为那是列出每个单独 post 的部分。

第一行 while (have_posts()) : the_post();取它能找到的第一个 post。现在下面的行(所以 the_title 和 the_permalink 和 the_content)都是从第一个 post 中抓取的,并放在你的网站上。现在你到了写着:endwhile 的那一行。现在这很有趣,因为只要有 posts while 就会循环。由于仍然有 posts wordpress 没有经过,但它再次运行 while 循环,获取它可以找到的第一个 post。所以它放在第二个 post 下。现在假设你只有 2 个博客 posts 这是 while 循环结束和你的 endif 被执行的地方。

如果您还有其他问题,请随时提出。