2011-06-10 71 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