PHP / Wordpress循环 - 创建分隔符

时间:2014-09-11 11:31:19

标签: php wordpress

我有以下功能,它抓取并显示与帖子相关联的类别,这完美无缺,但我想在它们之间放置分隔符而不是100%确定如何实现这一点。任何人都可以帮我一把吗?

CAT1 CAT2 CAT3

理想情况下喜欢:

CAT1 / CAT2 / CAT3

注意最后一个没有分隔符

PHP

<ul class="inline-list">
<?php 
  $id = get_the_ID();
  $cats = get_the_category($id);
  foreach ( $cats as $cat ):
?>
    <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
<?php
  endforeach;
?>
    <li><?php FoundationPress_entry_meta(); ?></li>
</ul>

5 个答案:

答案 0 :(得分:1)

正如其他人所解释的那样,CSS将是首选方式。但是如果你真的想在PHP中这样做,可以通过连接或输出缓冲将列表的html代码保存到变量中:

ob_start();
foreach ( $cats as $cat ) {
echo '<li><a href="'.get_category_link($cat->cat_ID).'">'.$cat->name.'</a> /</li>';
}
$list = ob_get_clean();

然后你可以使用substr函数删除最后7个字符(" /</li>")并输入&#34; </li>&#34;在输出代码之前返回:

echo substr($list, 0, -7).'</li>;

答案 1 :(得分:0)

要在代码中执行此操作,您只需执行以下操作:

<ul class="inline-list">
<?php 
  $id = get_the_ID();
  $cats = get_the_category($id);
  foreach ( $cats as $cat ):
?>
    <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
<?php
  endforeach;
?>
    <li class="no-border"><?php FoundationPress_entry_meta(); ?></li>
</ul>

CSS:

ul.inline-list li{
  border-right:1px solid #eee;
}
ul.inline-list li.no-border{
  border-right:none;
}

或者,您可以使用nth-childfirst-childlast-child CSS选择器来实现此目的。

例如:

ul.inline-list li {
  border-left:1px solid #eee;
}
ul.inline-list li:first-child{
  border-left:none;
}

此代码在所有li的左侧设置浅灰色边框。然后第二个语句从第一个 li中删除边框。

使用border-rightlast-child(从最后 li删除边框)可以实现同样的效果。


在这两种情况下,您都可以使用CSS作为分隔符,无论是边框,背景还是使用before添加 / 字符。

答案 2 :(得分:0)

mikemike的答案是一个完美的解决方案,但如果由于某种原因你想用代码来做,你可以尝试这个。

<ul class="inline-list">
<?php 
 $id = get_the_ID();
 $cats = get_the_category($id);
 $count = 1;
 foreach ( $cats as $cat ):
?>
<li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a> </li>
<?php
 if($count < count($cats)):
   echo '/';
 endif;
$count++;
endforeach;
?>
<li><?php FoundationPress_entry_meta(); ?></li>
</ul>

答案 3 :(得分:0)

您可以计算已完成的迭代次数,如果小于总次数,则输出分隔符:

$count = count($cats);
$i = 0;
foreach ( $cats as $cat ):?>
    <li>
        <a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a>
        <?php echo ++$i < $count ? '/' : '';?>
    </li>
<?php endforeach;

实例:http://codepad.viper-7.com/7QU7x9

答案 4 :(得分:0)

如果您只想在php中执行此操作,我将从foreach循环更改为for循环,然后您可以在两者之间进行解密。

IE:

$length = count($cat);
for ($i = 0; $i < $length; $i++) {
    $cat = $cats[i];
    if ($i + 1 == $length) {?>
        <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a></li>
    <?php } else { ?>
        <li><a href="<?php echo get_category_link($cat->cat_ID); ?>"><?php echo $cat->name; ?></a> / </li>
    <?php }
}