2017-02-17 4 views
0

私はこの機能を、すべての保存されたソーシャルプロファイルを返すことになっている短いコードに接続しています。今のところ、最初のソーシャルプロファイルが出力されるのは2つだけです。 私はこのコードが出力を返す方法に何か問題があると思います、私はそれを解決する方法を知らないだけです。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は、関数によって返されるのではなく、ページにエコーされています。

ifステートメントの前に関数の冒頭に$output = ''を設定して、それにHTMLを追加してから、最後にendifの後に$ outputを返します。

は、いくつかは、はるかに複雑ですけれどもWordPressのコーデックスは、また助けるかもしれないいくつかの例があります。 https://codex.wordpress.org/Shortcode_API

0

SOLUTION

私はどんなエコー呼び出しの前に、関数の先頭にob_start()を追加しました。私が追加された機能の終わりに

$response = ob_get_contents(); 
ob_end_clean(); 
return $response; 
関連する問題