2014-11-05 1 views
0

У меня есть ходок для отображения терминов таксономии (см. Сообщение here). Это иерархический список, который 3 уровня: глубокие (. Число сообщений включая все подуровней)Wordpress: динамически запрашивать/фильтровать сообщения по таксономии term_id

Таксономия

  1. термины

    1.1. subterms (количество сообщений, включая подсубъекты 1 & 2)

    1.1.1. subsubterms (количество сообщений)

    • дисплей сообщение с категории "Subsubterms"

    1.1.2 subsubterms (количество сообщений)

    • дисплей сообщение с категорией "Subsubterms"

Термины отображаются отлично, но сообщения на подписях Уровень ubterm не отображается. Следующий код только отображает сообщение из категории «Без рубрики».

add_filter('XYZ_index', 'return_XYZ_index'); 

function return_XYZ_index() 
{ 

    $taxonomies = array( 
    'XYZ' 
); 

    $args = array(
    'orderby'   => 'name', 
    'order'    => 'ASC', 
    'hide_empty'  => false, 
    'fields'   => 'all', 
    'parent'   => 0, 
    'hierarchical'  => true, 
    'child_of'   => 0, 
    'pad_counts'  => false, 
    'cache_domain'  => 'core' 
); 

    $terms = get_terms($taxonomies, $args);  

    $return .= '<ul>';  

    foreach ($terms as $term) { 

     $subterms = get_terms($taxonomies, array(
      'parent' => $term->term_id, 
      'hide_empty' => false 
     )); 

     //count posts in terms plus subterms 
      $count = 0; 
      $countargs = array(
      'child_of' => $term->term_ID, 
      ); 
      $tax_terms = get_terms($taxonomies,$countargs); 
      foreach ($tax_terms as $tax_term) { 
      $count +=$tax_term->count; 
      } 

     // return terms 
     $return .= sprintf(
     '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">' . $count . '</span><span class="cat-description">%3$s</span>',  
     $term->term_id, 
     $term->name, 
     $term->description 
    ); 

     //count posts in subterm 
     $countsub = 0; 
     $countsubargs = array(
     'child_of' => $subterm->term_id, 
     ); 
     $tax_term_subs = get_terms($taxonomies, $countsubargs); 
     foreach ($tax_term_subs as $tax_term_sub) { 
     $countsub +=$tax_term_sub->count; 
     } 


     $return .= '<ul>'; 

     foreach ($subterms as $subterm) { 

      $subsubterms = get_terms($taxonomies, array(
      'parent' => $subterm->term_id, 
      'hide_empty' => false 
      ));    

      // return subterms 
      $return .= sprintf(
      '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">' . $countsub . '</span><span class="cat-description">%3$s</span>',  
      $subterm->term_id, 
      $subterm->name, 
      $subterm->description 
     ); 

      $return .= '<ul>'; 

      foreach ($subsubterms as $subsubterm) { 

      // return subsubterms 
      $return .= sprintf(
      '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">%3$s</span><span class="cat-description">%4$s</span>',  
      $subsubterm->term_id, 
      $subsubterm->name, 
      $subsubterm->count, 
      $subsubterm->description 
      ); 

      // return posts (**EDITED CODE**) 

      $postargs = array(
      'tax_query' => array(
       array(
       'taxonomy' =>'XYZ, 
       'field' => 'id', 
       'terms' => $subsubterm->term_id 
       ) 
      ) 
      ); 
      $post_query = new WP_Query($args); 
      if ($post_query->have_posts()) : 
       $return .= '<ul>'; 
       while ($post_query->have_posts()) : $post_query->the_post(); 
        $return .= '<li><a class="link" href="' . get_permalink() . '">' . get_the_title() . '</a></li>' . "\n"; 
       endwhile; 
       $return .= '</ul>'; 

      wp_reset_postdata(); 
      else: 
      endif; 

      $return .= '</li>'; //end subsubterms li 
      } 

      $return .= '</ul>'; //end subsubterms ul 

     $return .= '</li>'; //end subterms li 
     }    

     $return .= '</ul>'; //end subterms ul 

     $return .= '</li>'; //end terms li 
    } //end foreach term   

    $return .= '</ul>'; 

    return $return; 
} 

Я не уверен, если эта часть даже возможно:

'term' => $subsubterm->term_id 

Спасибо!

+0

пожалуйста, предоставьте весь код, можно проверить –

+0

Полный код добавил, спасибо! – george

ответ

0

Замените категорию своей фактической таксономией. Используйте следующий код:

  $args = array(
       'tax_query' => array(
       array(
       'taxonomy' =>'category', 
       'field' => 'id', 
       'terms' => $subsubterm->term_id 
      ) 
      ) 
    ); 
$post_query = new WP_Query($args); 
if ($post_query->have_posts()) : 
    $return .= '<ul>'; 
    while ($post_query->have_posts()) : $post_query->the_post(); 
     $return .= '<li><a class="link" href="' . get_permalink() . '">' . get_the_title() . '</a></li>' . "\n"; 
    endwhile; 
    $return .= '</ul>'; 

wp_reset_postdata(); 
else: 
endif; 

Или вы можете использовать полный код приведен ниже:

function return_XYZ_index() 
{ 

    $taxonomies = array( 
    'XYZ' 
); 

    $args = array(
    'orderby'   => 'name', 
    'order'    => 'ASC', 
    'hide_empty'  => false, 
    'fields'   => 'all', 
    'parent'   => 0, 
    'hierarchical'  => true, 
    'child_of'   => 0, 
    'pad_counts'  => false, 
    'cache_domain'  => 'core' 
); 

    $terms = get_terms($taxonomies, $args); 

    $return .= '<ul>'; 

    foreach ($terms as $term) { 

     $subterms = get_terms($taxonomies, array(
      'parent' => $term->term_id, 
      'hide_empty' => false 
     )); 

     //count posts in terms plus subterms 
      $count = 0; 
      $countargs = array(
      'child_of' => $term->term_ID, 
      ); 
      $tax_terms = get_terms($taxonomies,$countargs); 
      foreach ($tax_terms as $tax_term) { 
      $count +=$tax_term->count; 
      } 

     // return terms 
     $return .= sprintf(
     '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">' . $count . '</span><span class="cat-description">%3$s</span>',  
     $term->term_id, 
     $term->name, 
     $term->description 
    ); 

     //count posts in subterm 
     $countsub = 0; 
     $countsubargs = array(
     'child_of' => $subterm->term_id, 
     ); 
     $tax_term_subs = get_terms($taxonomies, $countsubargs); 
     foreach ($tax_term_subs as $tax_term_sub) { 
     $countsub +=$tax_term_sub->count; 
     } 


     $return .= '<ul>'; 

     foreach ($subterms as $subterm) { 

      $subsubterms = get_terms($taxonomies, array(
      'parent' => $subterm->term_id, 
      'hide_empty' => false 
      ));    

      // return subterms 
      $return .= sprintf(
      '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">' . $countsub . '</span><span class="cat-description">%3$s</span>',  
      $subterm->term_id, 
      $subterm->name, 
      $subterm->description 
     ); 

      $return .= '<ul>'; 

      foreach ($subsubterms as $subsubterm) { 

      // return subsubterms 
      $return .= sprintf(
      '<li id="category-%1$s" class="toggle">%2$s <span class="post-count">%3$s</span><span class="cat-description">%4$s</span>',  
      $subsubterm->term_id, 
      $subsubterm->name, 
      $subsubterm->count, 
      $subsubterm->description 
      ); 

      // return posts 
      $args = array(
        'tax_query' => array(
        array(
        'taxonomy' =>'category', 
        'field' => 'id', 
        'terms' => $subsubterm->term_id 
       ) 
       ) 
     ); 
    $post_query = new WP_Query($args); if ($post_query->have_posts()) : 
       $return .= '<ul>'; 
       while ($post_query->have_posts()) : $post_query->the_post(); 
       $return .= '<li><a class="link" href="' . get_permalink() . '">' . get_the_title() . '</a></li>' . "\n"; 
       endwhile; 
       $return .= '</ul>'; 

       wp_reset_postdata(); 

      else: 
      endif; 

      $return .= '</li>'; //end subsubterms li 
      } 

      $return .= '</ul>'; //end subsubterms ul 

     $return .= '</li>'; //end subterms li 
     }    

     $return .= '</ul>'; //end subterms ul 

     $return .= '</li>'; //end terms li 
    } //end foreach term   

    $return .= '</ul>'; 

    return $return; 
} 
+0

ЧТО ДЕЛАТЬ! Думаю, мне пора двигаться дальше и делать что-то еще ;-) Я выполнил ваш код, и он не сработал. Затем я использовал ваш полный код и - Tadaa - вот он: сообщения для каждого подсубъекта. Где-то должна быть опечатка. Во всяком случае, я не могу вас поблагодарить достаточно! – george

+0

К сожалению, подсчет отключен. Идея состоит в том, чтобы подсчитывать должности на каждом уровне, включая его уровни. Количество должностей в подсубъектах правильное, но на уровне субтерма и уровня времени учитываются сообщения из _all_ терминов. – george

+0

что вы хотите получить? счет или список сообщений? –