【发布时间】: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>';
}
输出:<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>';
}
【问题讨论】:
-
附带说明,如果您想要更多答案,您应该就您已经提出的问题的答案提供反馈。 See the faq 这个社区是如何运作的。
-
@stefgosselin 我之前尝试过,但它说我还没有足够高的声誉来评价答案,但我想我现在这样做了。
标签: php wordpress function foreach shortcode