如果(is_home()&&!is_front_page())


23

我在index.php文件中经常看到以下代码。我了解is_front_page()在查看网站首页(无论显示博客帖子索引还是静态页面)时is_home()返回true ,而在查看博客帖子索引(无论显示在首页还是静态页面上)时返回true。对于以下代码的使用,我仍然有些困惑-

<?php if ( have_posts() ) : ?>

    <?php if ( is_home() && ! is_front_page() ) : ?>
        <header>
            <h1 class="page-title screen-reader-text"><?php single_post_title(); ?></h1>
        </header>
    <?php endif; ?>

对于为什么这段代码如此受欢迎的任何解释,都将受到赞赏。

Answers:


15

当将静态页面设置为显示帖子时,这将显示页面标题。

例如

我在首页上显示帖子……它什么也不会做。

假设我在标题为“ 新闻 ...”的页面上显示帖子,它将在H1中显示“ 新闻”

这样做是为了在页面上显示帖子时显示页面标题,而在首页(主页)上显示博客帖子则不显示页面标题。

我们这样做是因为,如果它在首页上,它将显示第一篇文章的标题,使其显示两次(一次在H1顶部,另一次在帖子循环浏览时)。


谢谢Shramee。尝试找出它时,我在<h1>中找到了博客索引页的标题,但实际上并没有出现。我认为有些人只是用它来帮助使用屏幕阅读器的人,然后隐藏实际的文本,如果新手未评论/记录,这会使新手感到困惑。
olliew '16

嗯,这有助于了解在哪些上下文中使用了帖子(例如上例中的“新闻”),但主要用于SEO,H1在帮助搜索机器人更好地了解页面内容方面发挥了重要作用。
shramee '16

26

这是正确的做法:

if ( is_front_page() && is_home() ) {
// Default homepage

} elseif ( is_front_page()){
// Static homepage

} elseif ( is_home()){

// Blog page

} else {

// Everything else

}

这是显示或更改主页和博客页面内容的唯一(正确)方法。


4

我不确定“受欢迎”,在我看来似乎并不那么受欢迎(但后来我没有关注那么多主题)。

您似乎很好地掌握了每个条件的作用,因此这不会使您感到困惑。这结合了条件来检查博客索引是否正在显示不是在首页上。

嗯,single_post_title()我猜的原因是它显示的标题$wp_query->queried object(由主查询设置为当前上下文)而不是$post全局的(由迭代循环设置)。

在某些情况下,这些条件是相同的,但在情况检查不一样的情况下。循环将包含posts,但查询的对象将是page(除非我将事情混在一起:)。


我最近一直在浏览大量的模板,这很常见。您是对的,我了解循环的作用,只是我不理解为什么人们会选择以这种特定方式进行循环。为什么要使用single_post_title而不是the_title()?
olliew '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.