2017-05-07 61 views
1

我正在使用wordpress,並希望爲用戶提供使用簡碼將一個滑塊拉入帖子/頁面的功能。使用簡碼來查詢自定義帖子類型和返回輪播

[slider id="2"]

我也做了以下內容:

  • 創建自定義後類型「滑」
  • 採用了先進的自定義字段創建的所有職位類型中所需的字段。
  • 創建使用簡碼:

    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'); 
    

我現在需要調用所要執行的自定義後類型的WP_Query並建立HTML滑塊另一個功能......正是這部分我正在苦苦掙扎。我有這麼遠:

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傳遞給這個函數,並返回一個全功能的滑蓋(有一個很小的Javascript功能我需要添加到這個HTML以及)。

非常感謝任何人都可以提供幫助。

回答

0

而不是使用WP_Query, ->have_posts(), while, wp_reset_postdata,使用簡單的get_posts($args)並在結果上執行for循環。
- - 看到When should you use WP_Query vs query_posts() vs get_posts()?

代替echo而且,構建將返回到簡碼一個HTML字符串。 WordPress簡碼絕不應該是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 .=在多個操作中組合字符串。

相關問題