页面上条件标记的正确顺序是什么?

时间:2015-01-21 作者:Unix

我需要开发一个结构,在这个结构中,我对每种类型的页面、帖子和归档使用所有条件。

在WordPress上,我们有以下页面(从模板层次结构中提取):

错误404页搜索结果页存档页自定义分类年档案,月档案存档日存档自定义帖子(静态)页面

        • 网站首页
        • 博客帖子索引页面
        • 评论弹出页面

          is_home()
          
          ↑ 只有当博客索引显示在首页时,才会出现这种情况。

          is_front_page()
          
          ↑ 当它是博客索引或静态页面时,此条件返回TRUE。

          is_front_page() and is_home()
          
          ↑ 博客页面没有条件标记。因此,此代码有助于检测此页面。避免错误的正确顺序如下:

          if ( is_front_page() && is_home() ) {
              // Default homepage
          } elseif ( is_front_page() ) {
              // static homepage
          } elseif ( is_home() ) {
              // blog page
          } else {
              // everything else
          }
          
          然后,让我们看看会是什么样子:

          if ( is_front_page() && is_home() ) {
              //...
          } elseif ( is_front_page() ) {
              //...
          } elseif ( is_home() ) {
              //--------------------------------
          } elseif ( is_post_type_arachive() ) {
              //...
          } elseif ( is_tax() ) {
              //...
          } elseif ( is_author() ) {
              //...
          } elseif ( is_tag() ) {
              //...
          } elseif ( is_category() ) {
              //...
          } elseif ( is_year() ) {
              //...
          } elseif ( is_month() ) {
              //...
          } elseif ( is_day() ) {
              //...
          } elseif ( is_date() ) {
              //...
          } elseif ( is_archive() ) {
              //... Else: any archive page
              //--------------------------------
          } elseif ( is_attachment() ) {
              //...
          } elseif ( is_single() ) {
              //--------------------------------
          } elseif ( is_page_template() ) {
              //...
          } elseif ( is_page() ) {
              //--------------------------------
          } elseif ( is_singular() ) {
              //... Else: any singular page
              //--------------------------------
          } elseif ( is_404() ) {
              //...
          } elseif ( is_search() ) {
              //...
          } elseif ( is_paged() ) {
              //... Additional settings
              //... for paged archives.
          }
          
          我想将其用于几个功能:面包屑、元信息(开放图、元标记),或者只是自定义标题。

          这是正确的顺序吗?

          我应该使用is_main_query() 在某个时候?

  • 1 个回复
    最合适的回答,由SO网友:Pieter Goosen 整理而成

    没有真正正确的顺序来使用条件句。一般的经验法则是将最常用的条件放在第一位,最不常用的条件放在最后

    我还认为在这里切换会更好一些,因为它会更快一些。正常的else/if语句在执行之前重新计算语句,而as开关不会重新计算条件。

    只是一张便条,is_archive() 将在所有档案中返回true,因此请小心。在FrontPage和blogpages上,您可以去查看this recent post 我已经做了

    有条件的is_main_query() 不需要。它基本上只在某些东西可以影响主查询和自定义查询的情况下才需要,例如pre_get_posts

    编辑基本开关的计算结果通常为真。如果条件的计算结果为true,则停止执行开关,并从开关输出值。这是一个基本开关

    switch ( true ) {
    
    case (is_home() ):
    
        $text = \'This is home\';
    
        break;
    
    case ( is_category() ):
    
        $text = \'This is a category page\';
    
        break;
    
    case ( is_tag() ):
    
        $text = \'This is a tag page\';
    
        break;
    
    default:
    
        $text = \'This is not home, category or tag pages\';
    
        break;
    
    }
    
    现在可以在标题中输出$文本,如下所示

    echo $text;
    
    这只是简单的事情,应该能给你一个基本的想法

    结束

    相关推荐