2017-02-17 2 views
0

У меня есть эта функция, связанная с коротким кодом, который должен возвращать все сохраненные социальные профили. На данный момент он выводит только первый социальный профиль, хотя он получил еще два. Я думаю, что что-то не так с тем, как этот код возвращает вывод, я просто не знаю, как его решить.Функция Wordpress не выводит все элементы списка

function ichi_social_profiles() { 

    if($social_profiles = Youxi()->option->get('social_profiles')): 

    ?><div class="site-social-profiles"> 

     <ul class="plain-list"><?php 

     foreach($social_profiles as $profile): 

      $profile = wp_parse_args($profile, array(
      'title' => '', 
      'url'  => '#', 
      'icon' => 'socicon socicon-500px', 
      'new_tab' => 0 
     )); 

      $output = '<li>'; 

      $output .= '<a href="' . esc_url($profile['url']) . '" title="' . esc_attr($profile['title']) . '"' . (wp_validate_boolean($profile['new_tab']) ? ' target="_blank"' : '') . '>'; 

       $output .= '<span class="' . esc_attr($profile['icon']) . '"></span>'; 

      $output .= '</a>'; 

      $output .= '</li>'; 


      return $output; 

     endforeach; 

     ?></ul> 

    </div><?php endif; 

} 
add_shortcode('some-ikon', 'ichi_social_profiles'); 

ответ

1

return заявление слишком рано, внутри цикла foreach, и он возвращает только содержимое $ вывода. Кроме того, тег div, тег ul и остальная часть HTML повторяются на странице, а не возвращаются функцией.

я установил бы $output = '' в начале функции перед if заявление и приложить к нему HTML, как вы идете, то просто вернуть $ выход в конце, после endif.

WordPress Codex имеют некоторые примеры, которые также могут помочь, хотя некоторые из них гораздо сложнее: https://codex.wordpress.org/Shortcode_API

0

РЕШЕНИЯ

Я добавил ob_start() в начало функции перед любым эхом вызова.

в конце функции я добавил:

$response = ob_get_contents(); 
ob_end_clean(); 
return $response;