Я использую код PHP ниже для отображения классов CSS, основанных на пользовательских таксономиях, примененных к моим сообщениям WordPress. Моя таксономия называется 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>';
}