2017-05-07 3 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를 통과하고 (나뿐만 아니라이 HTML에 추가 할 필요가 작은 자바 스크립트 기능이) 완벽하게 작동하는 슬라이더를 반환 할 수 있도록 노력하겠습니다.

누구에게나 미리 감사드립니다.

답변

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를 참조하십시오. WordPress의 단축 코드는 결코 echo이 아니어야합니다. 그들은 문자열이 반환 될 것으로 예상합니다. 중요

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

: PHP heredoc 예, 그것을 위해 완벽한입니다 HTML;전이나 후에 공백이 없어야합니다 폐쇄.

이상적으로는 $html을 비트 단위로 작성하여 완벽한 마크 업을 반환하는지 확인하는 것이 가장 좋습니다. $html .=을 사용하여 둘 이상의 조작으로. 자열을 구성 할 수 있습니다.