2016-07-21 4 views
0

私はこのコードを持っています。このコードは、WordPressのすべてのカテゴリを表示するために使用されます。foreachでのコンマの問題

foreach((get_the_category()) as $category) { 
    echo $category->cat_name . ', '; 
} 

しかし、カテゴリが1つしか表示されていない場合でも、そのカテゴリのコンマはまだ表示されています。

  • 1カテゴリ:[カテゴリ]
  • 2カテゴリ:[カテゴリ] [カテゴリ]
  • そして、同じことが3つのカテゴリーのために行く:[カテゴリ] 、私はこのようにそれをしたいです [カテゴリ] [カテゴリ]

これは可能ですか?私が試してみました:

foreach((get_the_category()) as $category) { 
    $getcount = count(get_the_category()); 
    if($getcount > 1) { 
     echo $category->cat_name . ', '; 
    } else { 
     echo $category->cat_name; 
    } 
} 

しかし、それはまた、最善の解決策ではありません以上1つのカテゴリがありますとき、同じ問題がaccurます。

大変助かります。

+0

'$ count = 0; foreach((get_the_category())を$ categoryとして使用します){ echo(!$ count? '、': '')。 $ category-> cat_name; $ count ++; } ' –

+0

[implode](http://php.net/implode)ですか? – Oldskool

答えて

6

が一覧表示されます :

$categories = [] 
foreach((get_the_category()) as $category) { 
    $categories[] = $category->cat_name; 
} 

echo implode(', ', $categories); 

をそれとも、使用することimplodearray_mapと:

echo implode(', ', array_map(function($category) { 
    return $category->cat_name; 
}, get_the_category())); 
4

なぜthe_category(', ');を使用しませんか?また、あなたがimplode使用することができimplode()

$categories = array() 
foreach((get_the_category()) as $category) { 
    $categories[] = $category->cat_name; 
} 
echo implode(', ', $categories); 
+1

これはおそらくこれを達成するための最もWordpress-ishの方法です。いいですよ。 – Oldskool

+0

これは素晴らしい解決策ですが、私が避けたいと思っているカテゴリにリンクを追加します。 –

+0

@ J.Doe代わりに[get_the_category_list()](https://codex.wordpress.org/Function_Reference/get_the_category_list)を使用してください。 – Oldskool

2

を使用することができ、すべてのポストカテゴリ

2

これを試してみてください。

$str = ''; 
     foreach((get_the_category()) as $category) { 
      $str .= "$category->cat_name , "; 
     } 
    $str = rtrim($str,', '); 
    echo $str; 
1

最も簡単な方法は、単にあなたのforeachループ内のカテゴリ名のarrayを構築した後implodeを使用することです。そして、次のような数行しかかかりません:

<?php 
     $catNames = array(); 
     foreach((get_the_category()) as $category) { 
      $catNames[] = $category->cat_name; 
     } 
     echo implode(', ', $catNames);