我有以下功能,它可以获取并显示与帖子相关的类别,效果很好,但我想在它们之间放置分隔符,但不能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>
正如其他人所解释的,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>"
),并在输出代码之前将"</li>
"放回:
echo substr($list, 0, -7).'</li>;
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>
要在代码中做到这一点,只需执行以下操作:
<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-child
、first-child
或last-child
CSS选择器来实现这一点。
例如:
ul.inline-list li {
border-left:1px solid #eee;
}
ul.inline-list li:first-child{
border-left:none;
}
此代码在所有li
s的左侧设置一个浅灰色边框。然后,第二条语句从第一个li
中删除边框。
border-right
和last-child
也可以实现同样的效果(从最后li
中删除边界)。
在这两种情况下,您都可以使用CSS作为分隔符,无论是边框、背景还是使用before
添加/字符。
您可以计算完成了多少次迭代,如果少于总数,则输出分隔符:
$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
如果您只想在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 }
}