2017-05-07 3 views
1

私はwordpressを使用しており、ショートコードを使用してポスト/ページにスライダを移動する機能を提供したいと考えています。ショートコードを使用してカスタム投稿の種類と返信カルーセルを照会する

すなわち、私は次のように行われている[slider id="2"]

  • 作成したカスタムポストタイプ「スライダー」
  • ポストタイプ内で必要なすべてのフィールドを作成するために、高度なカスタムフィールドを使用します。私は今、それはこの部分である...カスタムポストタイプのWP_Queryを実行し、HTMLスライダーを構築しようとしている別の関数を呼び出す必要が

    function landwSliderShortcode($atts = [], $content = null, $tag = '') 
    { 
    $atts = array_change_key_case((array)$atts, CASE_LOWER); 
    $slider_atts = shortcode_atts([ 
             'id' => '1', 
             ], $atts, $tag); 
    return $slider_atts['id']; 
    } 
    
    function landwSliderShortcodes_init() 
    { 
    add_shortcode('slider', 'landwSliderShortcode'); 
    } 
    add_action('init', 'landwSliderShortcodes_init'); 
    

を:使用してショートを作成し

  • 私は苦労しています。私はこれまでのところ持っている:

    function getSliderData($sliderId) { 
        $slidercount = 0; 
        $args = array(
        'post_type' => 'slider', 
        'post_status' => 'publish', 
        'posts_per_page' => '1', 
        'p' => $sliderId, 
        ); 
        $sliderLoop = new WP_Query($args); 
        if ($sliderLoop->have_posts()) : 
        while ($sliderLoop->have_posts()) : $sliderLoop->the_post(); 
    
        $image = get_sub_field('image'); 
        $image_render = $image['sizes'][$image_asset_size]; 
        $add_link = get_sub_field('add_link'); 
        $link_type = get_sub_field('link_type'); 
        $internal_link = get_sub_field('internal_link'); 
        $external_link = get_sub_field('external_link'); 
        $add_lightbox = get_sub_field('add_lightbox'); 
        $lightboxasset = get_sub_field('lightbox_asset'); 
        $lightboxassetcaption = get_sub_field('lightbox_caption'); 
        $caption = get_sub_field('caption'); 
        $sub_caption = get_sub_field('sub_caption'); 
    
        ?> 
    
         <div class="slider-wrap"> 
          <?php if ($add_link) { 
            if ($link_type == "External") { 
             echo '<a class="carousel-slide-link" href="'.$external_link.'" target="_blank"></a>'; 
            } else { 
             echo '<a class="carousel-slide-link" href="'.$internal_link.'"></a>'; 
            } 
           } 
          ?> 
          <?php if ($add_lightbox) { ?> 
            <a class="carousel-slide-link" data-fancybox data-src="#SliderModal<?php echo $slidercount ?>" target="_blank" href="javascript:;"></a> 
          <?php } ?> 
    
          <img src="<?php echo $image_render; ?>"> 
    
          <!-- 6 Mar 17 added conditional to show the caption --> 
          <?php if (strlen($sub_caption) > 0 || strlen($caption) > 0) : ?> 
          <div class="post-wrap-meta"> 
           <span><?php echo $sub_caption; ?></span> 
           <p class="slider-caption-text"><?php echo $caption; ?></p> 
          </div> 
          <?php endif ?> 
         </div> 
    
         <!-- output the modal --> 
    
         <div style="display: none;" class="standard__modal" id="SliderModal<?php echo $slidercount; ?>"> 
          <?php echo $lightboxasset ?> 
          <p class="slider-caption-text"> 
           <?php echo $lightboxassetcaption ?> 
          </p> 
         </div> 
    
         <?php 
          $slidercount ++; 
          endwhile; 
         ?> 
         <?php 
         endwhile; 
        wp_reset_postdata(); 
        endif; 
    } 
    

    が、私はこの関数にsliderId VARを渡すと(私もこのHTMLに追加する必要があり、小さなJavascriptの機能がある)完全に機能するスライダーを返すことができるように願っています。

    事前に全員に感謝しています。

  • 答えて

    0

    WP_Query, ->have_posts(), while, wp_reset_postdataの代わりに、単純なget_posts($args)を使用し、結果にforループを実行します。 -
    - ショートに返されるHTML文字列を構築し、When should you use WP_Query vs query_posts() vs get_posts()?

    、代わりのechoを参照してください。ワードプレスのショートコードは決してechoではありません。文字列が返されることを期待しています。 PHP heredocは、例えば、そのために最適です:

    function getSliderData($sliderId) { 
        $some_var = 'Value of the var'; 
        $html = <<<HTML 
         <div>$some_var</div> 
         <h3>$post->title</h3> 
    HTML; 
        return $html; 
    } 
    

    重要:クロージングHTML;の前または後に空白があってはなりません。

    理想的には、$htmlをビット単位で構築し、完璧なマークアップを返すようにしてください。 $html .=を使用すると、複数の操作で文字列を構成できます。

    関連する問題