如果is_array没有按预期的wordpress子类别工作

时间:2015-01-15 19:12:56

标签: php wordpress

此代码工作正常并返回数组中的子类别,如果没有任何子类别,则不返回结果,

 $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 is数组后面插入一个标题,它会返回标题,无论是否有子类别,即:

$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;
?>

我通过使用count解决了它,但它对我来说似乎很笨拙,并且它应该与if一起工作。

  <?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;
    ?>

1 个答案:

答案 0 :(得分:1)

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

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

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

这样你就可以跳过回显标题和foreach的麻烦 - 现在正在点击而不是执行因为数组是空的。

HTH,

= C =