WordPress循环仅显一次分类名及获取子分类名的技术问询
解答你的两个WordPress问题
一、在循环内仅为第一篇文章显示分类名
完全可以在循环内实现!WP_Query对象自带一个current_post属性,它会从0开始记录当前循环到第几篇文章(第一篇对应的值就是0)。我们只需要给显示分类名的代码加个条件判断,只有当$catg->current_post == 0时才输出即可。
修改你的现有代码如下:
<?php $args = array( 'post_type' => 'post', 'orderby' => 'date', 'order' => 'ASC', 'cat' => 19 ); $catg = new WP_Query($args); ?> <?php if($catg->have_posts()) : ?> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 lock"> <?php while($catg->have_posts()) : $catg->the_post() ?> <div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 lock"> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12"> <?php // 仅第一篇文章显示分类名 if($catg->current_post === 0) { $categories = get_the_category(); if(!empty($categories)) { // 这里会用下面优化后的逻辑获取子分类 $subcategory = ''; foreach($categories as $cat) { if($cat->parent !== 0) { $subcategory = $cat; break; } } if($subcategory) { ?> <h2 style="text-transform: uppercase;"><?php echo $subcategory->cat_name; ?></h2> <?php } } } ?> </div> <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 lock"> <a href="<?php echo get_permalink( $post->ID ); ?>" class="topico1-link-c"> <div class="topico3-col2-c cursos-margem-direita col-xs-12 col-sm-12 col-md-12 col-lg-12" style="padding-left: 0px;"> <div class="topico1-img col-xs-12 col-sm-12 col-md-12 col-lg-12 lock"> <img src="<?php echo wp_get_attachment_url(get_post_thumbnail_id($post->ID)); ?>"> <div class="imagem-pelicula"></div> </div> <div class="topico1-title col-xs-12 col-sm-12 col-md-12 col-lg-12"> <h3 class="h3-low-c"><?php echo get_the_title(); ?></h3> </div> </div> </a> </div> </div> <?php endwhile ?> <?php endif ?> </div>
二、准确获取子分类名
你之前通过$category[1]获取的方式不可靠,因为get_the_category()返回的分类顺序是由分类ID或后台自定义排序决定的,父分类随时可能排在前面。正确的做法是遍历分类数组,找到parent属性不为0的分类——子分类的parent值是其父分类的ID,而顶级分类的parent始终是0。
如果你只需要第一个子分类,用这段逻辑就够了:
<?php $categories = get_the_category(); $subcategory = ''; if(!empty($categories)) { foreach($categories as $cat) { // 筛选出父ID不为0的分类(即子分类) if($cat->parent !== 0) { $subcategory = $cat; break; // 找到第一个子分类就停止遍历 } } // 有子分类就输出名称 if($subcategory) { echo '<h2 style="text-transform: uppercase;">' . $subcategory->cat_name . '</h2>'; } } ?>
如果文章可能属于多个子分类,想要显示所有子分类,只需要去掉break,改成循环输出每个子分类的名称即可。这样不管分类排序怎么变,都能精准拿到子分类,不会误取到父分类啦!
内容的提问来源于stack exchange,提问作者BlaTimba
相关产品推荐
相关产品推荐

