in_category in index.php

时间:2014-12-13 作者:Jamie

我正在尝试分类,因为我正在处理一个主题,该主题将在头版上有许多不同的部分。对这些部分使用类别是有意义的。现在,我有三个部门,分别在3个不同类别中设置了职位。我有一个博客,关于和团队类别。每个类别都有特定的html。所以在主循环中,我试图检查显示的是哪个类别。我想我可以做这样的事。。

 if has post
 while has post, the post
 if in_cateogory(\'blog\')
   get post content
 endif
 endwhile
 endif
当我这样做的时候,我不会在头版上看到任何帖子。指数php无法获取博客部分。为什么这不起作用?

2 个回复
SO网友:Mayeenul Islam

以下代码适用于我。我把儿童主题定为“二十一二”。只需复制并替换index.php 使用以下内容并让我知道(别忘了根据您的数据库更改类别slug):

<?php if( have_posts() ) :
   while( have_posts() ) : the_post();
      if(in_category(\'aciform\'))
        { echo \'<h2>\'.get_the_title().\'</h2>\'; }
      else if(in_category(\'blogroll\'))
        { echo \'<h2> K-\'. get_the_title() .\'</h2>\'; }
      else
        { echo "<div>bla bla</div>"; }
   endwhile;
endif; ?>

SO网友:Pieter Goosen

您还可以使用the_posts 过滤器和usort 根据需要对帖子进行排序。the_posts 遗憾的是,没有记录过滤器

你可以试试这样的

add_filter( \'the_posts\', function( $posts, $q ) {
    if( $q->is_main_query() && $q->is_home() ) {
        usort( $posts, function( $a, $b ){
             return strcasecmp( 
                get_the_category( $a->ID )[0]->name, 
                get_the_category( $b->ID )[0]->name 
            );
        });
    }
    return $posts;
}, 10, 2 );

EDIT

您还可以运行循环,只显示一个类别、回放循环、再次运行并显示下一个类别,依此类推

// main loop
if (have_posts()) { 
    while (have_posts()) { 
        the_post();

        if( in_category( \'a\' ) ) {
            //display category \'a\' posts
        }
    }

    // rewind
    rewind_posts();

    // new loop
    while (have_posts()) { 
        the_post();

        if( in_category( \'b\' ) ) {
            //display category \'b\' posts
        }
    }
}

结束

相关推荐

使用GET_CATEGORIES时突出显示当前类别

我成功地使用了helgatheviking在这篇文章中的回答:Show children of top level category only 请参见下面的代码:// get the category object for the current category $thisCat = get_category( get_query_var( \'cat\' ) ); // if not top-level, track it up the chain to find its