2016-09-14 9 views
1

속성 용어를 출력하고 해당 아카이브에 링크하는 간단한 단축 코드를 만들었습니다. HTML이 같을 것이다단축 코드 - 알파벳순으로 정렬 된 목록에 속성의 모든 용어를 표시합니다.

A 
Adidas 
Askwith 

B 
Bonham 
Burberry 

... : 그들은 다음과 출력으로 그래서 나는 문자로 결과를 나눌 수 있도록하고 싶습니다

<span id="a">A</span> 
<ul class="brandlist"> 
<li><a href="/brand/adidas">Adidas</a></li> 
<li><a href="/brand/askwith">Askwith</a></li> 
</ul> 

<span id="b">B</span> 
<ul class="brandlist"> 
<li><a href="/brand/bonham">Bonham</a></li> 
<li><a href="/brand/burberry">Burberry</a></li> 
</ul> 

을하지만 난에있어 이렇게하는 방법에 약간의 손실. 글자에 대한 새로운 사용자 지정 분류 체계를 만들 것을 제안하는 몇 가지 기사를 읽었지만 간단한 방법으로 해결할 수있는 일을하는 데는 먼 길 인 것 같습니다. 는 I이를

function brands_output($atts){ 

    ob_start(); 
    echo '<ul class="brandlist">'; 

    $terms = get_terms(array(
     'taxonomy' => 'pa_brand', 
     'orderby' => 'name', 
     'hide_empty' => false, 
     ) 
    ); 

    foreach ($terms as $term) { 
    $brand = $term->name; 
    $slug = $term->slug; 

    echo '<li><a href="/brand/'.$slug.'/">'.$brand.'</a></li>'; 
    } 

    echo '</ul>'; 
    $output = ob_get_clean(); 
    return $output; 

} 
add_shortcode('showbrands', 'brands_output'); 

달성 방법 : 여기

내가 지금까지 만든 단축 코드입니까?

감사합니다.

답변

2

여기에 귀하의 완전한 기능을 나타내는 단축 코드가 있습니다. 다른 조건 집합으로 테스트 해봤는데 완벽하게 작동합니다 (그래서 당신의 것이 정확하고 올바르게 작동하기를 바랍니다).

먼저 레벨 1의 알파벳 문자와 레벨 2의 해당 쌍 이름/슬러그를 사용하여 2 차원 배열로 데이터를 준비합니다.

if (!function_exists('showbrands')) { 

    function showbrands(){ 

     $term_arr = array(); 

     $terms = get_terms(array(
      'taxonomy' => 'pa_brand', 
      'orderby' => 'name', 
      'hide_empty' => false, 
     )); 

     foreach ($terms as $term) { 
      $brand = $term->name; 
      $slug = $term->slug; 

      // Getting the first letter of $brand term name 
      $letter = substr($brand, 0, 1); 

      // PREPARING DATA IN A BI DIMENSIONAL ARRAY 

      // Inserting the $letter in an array just once (array level 1) 
      // Inserting for each letter all the corresponding pairs "$brand => $slug" (array level 2) 
      if(!array_key_exists($letter, $term_arr)) 
       $term_arr[$letter] = array($slug => $brand); 
      else 
       $term_arr[$letter][$slug] = $brand; 
     } 

     $output = '<div class="brandlist-container">'; 

     // ITERATING IN THE BI DIMENTIONAL $TERM_ARR ARRAY 

     // first level the letters 
     foreach($term_arr as $key_letter => $terms_in_letter){ 
      $output .= '<span id="'. strtolower($key_letter) .'">'. $key_letter .'</span> 
        <ul class="brandlist">'; 

      // second level the $brand/$slug pairs 
      foreach($terms_in_letter as $key => $value){ 
       $output .= '<li><a href="/brand/'.$key.'/">'.$value.'</a></li>'; 
      } 
      $output .= '</ul>'; 
     } 
     $output .= '</div>'; 

     return $output; 
    } 

    add_shortcode('showbrands', 'showbrands'); 

} 

이 코드의 function.php 파일에 간다 : 당신이 갖고 싶어 디스플레이를 만들기 위해이 양방향 dimentional 배열을 반복 한 후

... 여기

코드입니다 활성 자녀 테마 (또는 테마) 또는 모든 플러그인 파일에서.

이 코드는 테스트되었으며 작동합니다.

+0

그래도 고마워요. 브랜드와 슬러그로 쓰이는 슬러그 출력은 awdis-academy 일 때 Awdis Academy이되어야합니다. – d1ch0t0my

+0

나는 대답을 옳은 것으로 표시했으나 링크가 올바르게 출력되도록 고칠 수 있습니까? 이것을 체크하는 사람은 $ 출력을 바꾸었다. = '

  • '.$value.'
  • '; ~ $ output. = '
  • '.$key.'
  • '; 건배. – d1ch0t0my

    +0

    @ d1ch0t0my 아 ... 예 ... 죄송 합니다만 조금 반전 ... 코드를 업데이트했습니다. 감사 – LoicTheAztec