IF is_array 没有按预期工作 wordpress child 类别

IF is_array not working as expected wordpress child categories

此代码工作正常并且 return 是数组中的 sub-categories,如果没有任何子类别,则不会 return 结果,

 $parentCatName = single_cat_title('',false);
    $parentCatID = get_cat_ID($parentCatName);
    $childCats = get_categories( 'child_of='.$parentCatID );
    if(is_array($childCats)):
      foreach($childCats as $child){ ?>
     <?php query_posts('cat='.$child->term_id . '&posts_per_page=1');
         while(have_posts()): the_post(); $do_not_duplicate = $post->ID; ?>
    <!-- POST CODE -->
    <?php get_template_part( 'content', 'thumbs' ); ?>
    <!-- END POST CODE -->
    <?php
    endwhile;
    wp_reset_query();
    }
    endif;
    ?> 

但是,如果我尝试在 if 数组之后插入一个 header,它 returns header 是否存在 sub-category 即:

$parentCatName = single_cat_title('',false);
$parentCatID = get_cat_ID($parentCatName);
$childCats = get_categories( 'child_of='.$parentCatID );
if(is_array($childCats)):
echo 'Sub-Categories:' ;
  foreach($childCats as $child){ ?>
 <?php query_posts('cat='.$child->term_id . '&posts_per_page=1');
     while(have_posts()): the_post(); $do_not_duplicate = $post->ID; ?>
<!-- POST CODE -->
<?php get_template_part( 'content', 'thumbs' ); ?>
<!-- END POST CODE -->
<?php
endwhile;
wp_reset_query();
}
endif;
?>

我用计数解决了它,但对我来说它看起来很笨拙,如果是数组它应该可以工作。

  <?php
    $parentCatName = single_cat_title('',false);
    $parentCatID = get_cat_ID($parentCatName);
    $childCats = get_categories( 'child_of='.$parentCatID );
    $countChild = count($childCats);
    if ($countChild > 0) : echo '<h2>Sub-Categories:</h2>'; endif;
    if(is_array($childCats)):
      foreach($childCats as $child){ ?>
     <?php query_posts('cat='.$child->term_id . '&posts_per_page=1');
         while(have_posts()): the_post(); $do_not_duplicate = $post->ID; ?>
    <!-- POST CODE -->
    <?php get_template_part( 'content', 'thumbs' ); ?>
    <!-- END POST CODE -->
    <?php
    endwhile;
    wp_reset_query();
    }
    endif;
    ?>

如评论中所述,问题不是 is_array() 不起作用,问题是您没有测试数组是否有任何行。

你的方法很好。没有不需要执行代码的方法。如果我这样做,我可能会像这样短路 IF 语句:

if (is_array($childCats) and count($childCats)>0) {
    ...
}

这样你就跳过了报头和 foreach 的麻烦 - 现在正在命中而不是执行,因为数组是空的。

HTH,

=C=