2014-09-11 22 views
0

我有以下函數來抓取和顯示與帖子相關的類別,但是我想在它們之間放置分隔符,而不是100%確定如何實現此目的。任何人都可以借我一隻手嗎?PHP/Wordpress循環 - 創建一個分隔符

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> 

回答

1

正如其他人解釋,CSS將是首選的方式。使用

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

然後,你可以刪除最後7個字符(" /</li>"):但如果你真的想這樣做在PHP中,你可以保存的HTML代碼列表中的變量,無論是通過串聯或輸出緩衝substr函數並在輸出代碼之前放回「</li>」:

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

CSS是我的首選,但客戶需求:(無論如何,工作的一種享受!非常感謝! – 2014-09-11 11:58:18

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 S的左側。第二條語句然後刪除第一個li的邊界。

可以border-rightlast-child能夠獲得同樣的(從最後li去除邊框)。


在這兩種情況下,你可以使用CSS的分離器,不管是邊框,背景或使用before添加/字符。

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

+1

這不起作用,循環外有'li's。你也有一個語法錯誤。 – Mike 2014-09-11 11:42:33

+0

@mikemike循環外的列表元素似乎是未分化的。什麼語法錯誤? – Steve 2014-09-11 11:43:58

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 } 
}