2017-09-10 1 views
1

여러 아티스트 페이지가있는 음악 웹 사이트입니다 (아티스트마다 한 페이지 씩). 새로운 콘텐츠는 아티스트를 나타내는 Wordpress 태그가있는 게시물로 추가됩니다. 이것은 각 아티스트 페이지에 Wordpress 루프를 추가하여 해당 아티스트 태그로 필터링 된 모든 게시물을 표시 할 수 있도록하기위한 것입니다.이 PHP 스 니펫을 Wordpress 단축 코드로 변환하려면 어떻게해야합니까?

필터링 된 루프가 제대로 작동하고 있지만 불행히도 현재 페이지 템플릿의 HTML 안에 하드 라이트되어있어 태그 하나만 필터링합니다. 각 아티스트마다 새 페이지 템플릿을 만들고 싶지 않으므로 대신 functions.php 파일에 추가하고 싶습니다. 대신 각 아티스트의 새로운 단축 코드를 만들 수 있습니다.

<?php 
query_posts("tag=seefour"); 
if (have_posts()) { ?> 
    <?php while (have_posts()) { ?> 
    <?php the_post(); { ?> 
    <div class="jd-box"> 
     <a href="<?php the_permalink(); ?>"> 
     <?php the_post_thumbnail(); ?> 
     <div class="jd-overlay"></div> 
     <div class="jd-overlay-text"> 
      <?php the_title(); ?> 
     </div> 
     </a> 
    </div> 
<?php } ?> 
<?php } ?> 
<?php } ?> 

나는 최선의 선택이 seefour이 점을 설정하는 것입니다 있으리라 믿고있어 :

는 여기에 우리의 seefour 태그 모든 게시물에 대한 루프 필터 내 페이지 템플릿에서 현재 코드입니다 내 짧은 코드 내 functions.php 파일 - 어떻게 이것을 할 수 있습니까?

보너스 질문 : 장기적으로 지속 가능한가요? (30-50 명 이상 아티스트 포함) 또는 중복 코드가 많이 발생합니까? 제안 열기 ...

P.S. 나는 이런 종류의 질문이 이미 (원시 PHP로 시작하는) 응답되었음을 알고 있지만, HTML/PHP (그리고 PHP newb)의 혼합으로 시작하고 있기 때문에, 나는 그걸 작동시킬 수 없다. 그래서 다시 묻는 것에 대해 사과드립니다.

답변

1

우선, query_posts()을 절대로 사용해서는 안됩니다. 그것은 메인 WordPress주기를 생성하고 유지하는 내부 WordPress 기능입니다. 그것을 사용하면 예측할 수없는 방식으로 사이트를 중단시킬 수 있습니다. 대신 get_posts() 또는 WP_Query을 사용해야합니다.

은 당신의 functions.php에 다음을 추가, 사용자 정의 단축 코드를하려면 : tag :

function showtag_shortcode($atts) { 
    $atts = shortcode_atts(array(
     'tag' => '', // Default value. 
    ), $atts); 

    $posts = get_posts('tag=' . $atts['tag']); 
    if ($posts) { 
     $output = ''; 
     foreach ($posts as $post) { 
      setup_postdata($post); 
      $output .= '<div class="jd-box">'; 
      $output .= '<a href="' . get_the_permalink($post) . '">'; 
      $output .= get_the_post_thumbnail($post); 
      $output .= '<div class="jd-overlay"></div>'; 
      $output .= '<div class="jd-overlay-text">'; 
      $output .= get_the_title($post); 
      $output .= '</div>'; 
      $output .= '</a>'; 
      $output .= '</div>'; 
     } 
    } else { 
     $output = 'no data'; 
    } 
    wp_reset_postdata(); 

    return $output; 
} 

add_shortcode('showtag', 'showtag_shortcode'); 

이 기능은 하나 개의 매개 변수와 함께 [showtag] 단축 코드를 만들었습니다. 이 단축 코드는 다음 페이지와 같이 사용할 수 있습니다.

[showtag tag="seefour"] 
[showtag tag="disco"] 

등. 단축 코드 대신 표시 할 관련 태그가있는 게시물을 갖게됩니다.

+0

위의 Junaid의 정확한 표시가 끝날 때까지 어떻게 든 대답을 보지 못했습니다. 나는 당신의 판단을'get_posts()'와'query_posts()'에 대해 신뢰하지만, 나의 functions.php 파일에 정확하게 코드를 추가 한 다음 SeeFag 페이지에'[showtag tag = "seefour"]'를 추가하면, shortcode in 일반 텍스트. 아마도 나는 뭔가를 놓쳤을 까? – John

+0

shortcode가 일반 텍스트로 표시된다면, 아마도 function.php에'add_shortcode ...'줄을 추가하지 않았다는 것을 의미합니다. 어쨌든, 테스트 중에 내 코드에서 실수를 발견하고 대답을 업데이트했습니다. 답변 코드를 복사하고 다시 시도하십시오. –

+0

이것으로 돌아가서, 당신의 코드는 하드 코드 된 단축 코드''페이지 템플리트 내에서. WP 텍스트 편집기에서 정상적인 [단축 코드]로 제대로 작동하지 않는 이유를 알아낼 수 없습니다. – John

0

전체 코드를 짧은 코드에 넣으면 지저분해질 수 있습니다. 위젯 등에서 단락 코드를 사용할 수 있다는 것을 알고 있지만 그게 당신이 쓴 것이 아닌 것 같습니다.

그렇다면이 코드를 페이지 템플릿 Artist으로 설정하고 URL에 변수 (예 : http://example.com/artist?t=seefour)를 전달한 다음 페이지 템플릿에서 다음 코드를 사용하는 것이 가장 좋습니다. 이 (액세스), 실행 시간에 제공되는 변수에 의존하기 때문에

<?php 
/** 
* Template Name: Artist 
*/ 

query_posts("tag=" . $_GET['t']); 
if (have_posts()) { 
?> 
    <?php while (have_posts()) { ?> 
    <?php the_post(); { ?> 
    <div class="jd-box"> 
     <a href="<?php the_permalink(); ?>"> 
     <?php the_post_thumbnail(); ?> 
     <div class="jd-overlay"></div> 
     <div class="jd-overlay-text"> 
      <?php the_title(); ?> 
     </div> 
     </a> 
    </div> 
<?php 
    } 
    } 
} 
?> 

이 완전히가요 아티스트의 수를 위해 사용될 수있다.

+0

입력 해 주셔서 감사합니다. 필자가 작성한 코드를 구현 한 후 다음 코드를 내 ** 함수에 추가했습니다.PHP ** 파일 : 'function add_query_vars_filter ($ vars) {$ vars [] = "t"; return $ vars; } add_filter ('query_vars', 'add_query_vars_filter');' 그러나 URL의 끝에 **? t = seef ** **를 추가하려고하면이 경우 http : // localhost/dev/gang /? t = seefour - http : // localhost/dev/gang/tseefour /로 재 작성됩니다. 내가 여기에 뭔가 빠졌음을 안다 ... 어떤 생각인지? – John

+0

그 전에는 본 적이 없습니다. 사용하는 플러그인 중 일부가 다시 쓰기 규칙을 적용하는지 확인하십시오. – Junaid

+0

현재 사이트에 활성 플러그인이 없습니다. 내 ** functions.php ** 코드는 적어도 사용자 정의 ** 변수 **를 내 URL로 전달할 때 기대되는 것과 비슷합니까? 페이지 제목 아래의 Permalink 편집에서 **? t = seefour **를 직접 추가해야합니까? – John

관련 문제