2016-09-29 6 views
1

function.phpに関数があり、ショートコードでWordPressサイトの他の部分で呼びたいのですが、問題は私の関数の結果を保存する方法がわからないことです変数。誰かが私を助けることができれば、私はとても感謝しています。これはPHPコードです:関数から文字列を返す

<?php 
    function get_slider() { 
      $args = array(
      'post_type'  => 'something', 
        ); 
        $posts = get_posts($args); 
        echo $posts; 
        if($posts): ?> 
        <div class="custom-posts-grid"> 
        <?php foreach($posts as $post): setup_postdata($post); ?> 
         <?php if(have_rows('poslovna_darila')): ?> 
          <?php while(have_rows('poslovna_darila')): the_row(); ?> 
           <div class="slider_slick"> 
           <?php // vars 
           $image = get_sub_field('thumbnail_for_poslovna_darila'); 
           $link = get_sub_field('url_poslovna_darila'); 
           $count = count($posts);       
           ?>  
           <div class="slide"> 
            <a href="<?php echo $link; ?>"> 
            <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" class="image-overlay-post" /> 
            </a> 
           </div> 
           </div> 
          <?php endwhile; ?> 
         <?php endif; ?>       
        <?php endforeach; ?> 
        <?php wp_reset_postdata(); ?> 
        <?php endif; 
     } 

      add_shortcode ('slick_slider' , 'get_slider'); ?> 

コードは配列を返しますが、値を取得する必要があります。

+0

戻り値array = for forループ! – xYuri

答えて

0

出力バッファを使用して、ショートコードの文字列を返すことができます。

<?php 
function get_slider() { 
    $args = array(
     'post_type'  => 'something', 
    ); 

    $posts = get_posts($args); 

    //echo $posts; 

    ob_start(); // start the output buffer 

    if ($posts) : ?> 

     <div class="custom-posts-grid"> 
      <?php foreach ($posts as $post) : setup_postdata($post); ?> 
       <?php if (have_rows('poslovna_darila')): ?> 
        <?php while (have_rows('poslovna_darila')) : the_row(); ?> 
         <div class="slider_slick"> 
          <?php // vars 
          $image = get_sub_field('thumbnail_for_poslovna_darila'); 
          $link = get_sub_field('url_poslovna_darila'); 
          $count = count($posts);       
          ?>  
          <div class="slide"> 
           <a href="<?php echo $link; ?>"> 
           <img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt'] ?>" class="image-overlay-post" /> 
           </a> 
          </div> 
         </div> 
        <?php endwhile; ?> 
       <?php endif; ?>       
      <?php endforeach; ?> 
      <?php wp_reset_postdata(); ?> 
     </div> 

    <?php endif; 

    // return the contents of the output buffer as a string 
    return ob_get_clean();  
} 

add_shortcode('slick_slider' , 'get_slider'); ?> 
+0

ありがとうございましたが、ループ全体から1つのイメージしか得られません。私は、私が持っている投稿の数に等しい11回同じイメージを取得することを意味します。 – Mark

+0

関数の先頭に 'global $ post;'を追加してみてください。それがうまくいかない場合は、$ post-> IDをhave_rows()に渡す必要があります。 – Jrod

+0

ありがとうございました。 – Mark

関連する問題