2011-06-10 72 views
0

我使用下面的PHP代碼來顯示基於應用到我的WordPress博客的自定義分類法的CSS類。我的分類稱爲CC,它的三個選項是x,y和z。對於一個帖子說有三個:返回裏面短信內部foreach

$cc_terms = get_the_terms($post->ID,'cc'); 
foreach ($cc_terms as $term) { 
    echo ' '.$term->slug.'-active'; 
} 

輸出:X-有效Y主動Z-活躍

我試圖將其轉換成簡碼WordPress的功能(其中echo沒有就工作據我所知),基本上我需要弄清楚如何捕獲cc_class()作爲一個變量(而不是一個數組),以便它給我與上面相同的輸出。

function cc_meta($atts, $content = null) { 
    global $post; 
    extract(shortcode_atts(array('class' => 'default'), $atts)); 
    function cc_class() { 
     $cc_terms = get_the_terms($post->ID, 'cc'); 
     foreach($cc_terms as $term) { 
      return ' '.$term->slug.'-active'; 
     } 
    } 
    return '<div class="' . esc_attr($class) . cc_class() . '">...</div>'; 
} 

輸出:<div class="default x-active">...</div>

這只是採取的第一項,而不是所有三個,我不知道這使得如何return作品foreach循環。任何想法如何讓這個工作?

期望的輸出:<div class="default x-active y-active z-active">...</div>

更新1:我與.=嘗試作爲建議和我得到一個空白錯誤:

function cc_meta($atts, $content = null) { 
    global $post; 
    extract(shortcode_atts(array('class' => 'default'), $atts)); 

    $cc_terms = get_the_terms($post->ID, 'cc'); 
    foreach ($cc_terms as $term) { 
     $return .= ' '.$term->slug.'-active'; 
    } 
    return '<div class="' . esc_attr($class) . $return . '">...</div>'; 
} 

更新2:我除去global $post線它的作品 - 甜蜜!謝謝大家=)

function cc_meta($atts, $content = null) { 
    extract(shortcode_atts(array('class' => 'default'), $atts)); 
    $cc_terms = get_the_terms($post->ID, 'cc'); 
    foreach($cc_terms as $term) { 
     $return .= ' '.$term->slug.'-active'; 
    } 
    return '<div class="' . esc_attr($class) . $return . '">...</div>'; 
} 
+0

在一個側面說明,如果你想要更多的答案,你應該給的答案的問題反饋你已經問過。 [查看常見問題](http://stackoverflow.com/faq)瞭解這個社區的運作方式。 – stefgosselin 2011-06-10 21:32:53

+0

@stefgosselin我曾嘗試過,但它說我沒有足夠高的聲譽來評價答案,但我想我現在就做。 – ryanve 2011-06-10 21:54:28

回答

5

不要在你的函數中間返回,只在最後使用return。

代替return使用本:

$return .= 

和閉幕前}做一個​​

+1

正確的方法是'$ return。=' – Ibu 2011-06-10 21:36:51

+0

@powtac @ibu感謝您的好評。這似乎應該工作,但我現在得到一個空白的錯誤與更新的功能 - 請參閱上面的問題更新。 – ryanve 2011-06-10 21:49:31

+0

@ryanve:確保在添加之前定義'$ return'。在循環前添加'$ return ='';'並打開[錯誤報告](http://php.net/manual/en/function.error-reporting.php)**! – 2011-06-10 22:09:29