【问题标题】:Return inside foreach inside shortcode在短代码中返回内部 foreach
【发布时间】:2011-09-12 19:48:49
【问题描述】:

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

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

输出: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>';
}

输出:&lt;div class="default x-active"&gt;...&lt;/div&gt;

它只取第一个词而不是全部三个,这让我想知道returnforeach 循环中是如何工作的。知道我怎样才能让它工作吗?

想要的输出:&lt;div class="default x-active y-active z-active"&gt;...&lt;/div&gt;

更新 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>';
}

【问题讨论】:

  • 附带说明,如果您想要更多答案,您应该就您已经提出的问题的答案提供反馈。 See the faq 这个社区是如何运作的。
  • @stefgosselin 我之前尝试过,但它说我还没有足够高的声誉来评价答案,但我想我现在这样做了。

标签: php wordpress function foreach shortcode


【解决方案1】:

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

用这个代替return

$return .= 

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

【讨论】:

  • @powtac @ibu 谢谢好电话。看起来它应该可以工作,但我现在使用更新的功能得到一个空白错误 - 请参阅上面问题中的更新。
  • @ryanve:确保在添加之前定义$return。在循环前添加$return = '';开启error reporting!
  • @wesley-murch 谢谢/我删除了global $post 行,它可以在循环之前使用或不使用$return = '';。感谢您提供有关错误报告的提示!
  • 不定义 $return,“只会”抛出一个通知而不是一个警告......但总是建议避免通知!
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 2021-05-30
  • 2018-09-05
  • 1970-01-01
  • 2022-11-11
  • 2017-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多