在shortcode中返回foreach内部

rya*_*nve 0 php wordpress foreach function shortcode

我正在使用下面的PHP代码来显示基于应用于我的WordPress帖子的自定义分类法的CSS类.我的分类法称为CC,它的三个选项是x,y和z.对于包含所有三个帖子的帖子:

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

输出:x-active y-active z-active

我正在尝试将其转换为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>';
}
Run Code Online (Sandbox Code Playgroud)

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

这只是第一个而不是全部三个,这让我想知道如何returnforeach循环中工作.知道我怎么能让这个工作吗?

期望的输出: <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>';
}
Run Code Online (Sandbox Code Playgroud)

更新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>';
}
Run Code Online (Sandbox Code Playgroud)

pow*_*tac 5

不要在函数中间返回,只在最后使用return.

而不是return使用这个:

$return .= 
Run Code Online (Sandbox Code Playgroud)

在结束之前}做一个return $return;