2010-07-28 173 views
9

有沒有辦法從Wordpress中的分類中獲取所有帖子?從Wordpress中的自定義分類中獲取所有帖子

taxonomy.php,我有這個代碼從當前術語相關的術語中獲取帖子。

$current_query = $wp_query->query_vars; 
query_posts(array($current_query['taxonomy'] => $current_query['term'], 'showposts' => 10)); 

我想創建一個包含分類中所有帖子的頁面,而不管術語如何。

有一個簡單的方法來做到這一點,或者我要查詢的分類標準的條款,然後循環通過他們,等

回答

8
$myterms = get_terms('taxonomy-name', 'orderby=none&hide_empty');  
echo $myterms[0]->name; 

有了,你會發布的第一個項目,喲然後可以創建一個foreach;循環:

foreach ($myterms as $term) { ?> 
    <li><a href="<?php echo $term->slug; ?>"><?php echo $term->name; ?></a></li> <?php 
} ?> 

這樣,你會一一列舉了,如果你想發佈所有的人,-My溶液 - 創建一個的foreach內正常的WordPress的循環,但它必須有這樣的:

foreach ($myterms as $term) : 

$args = array(
    'tax_query' => array(
     array(
      $term->slug 
     ) 
    ) 
); 

// assigning variables to the loop 
global $wp_query; 
$wp_query = new WP_Query($args); 

// starting loop 
while ($wp_query->have_posts()) : $wp_query->the_post(); 

the_title(); 
blabla.... 

endwhile; 

endforeach; 

我發佈了一些非常類似的東西here

+2

上面的例子就行了用'「分類」 =>「$ term_name''需要像這樣''taxonomy'=>「$ term_name」''雙引號引用,或者更好的不引用像'taxonomy'=> $ term_name',或者甚至更好地省略先前的賦值, 'taxonomy'=> $ term-> slug'。也就是說,使用''tax_query'=> array(...)''顯示的方法[已被棄用](http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters)。希望這可以幫助。 – MikeSchinkel 2013-05-15 00:43:53

+0

對不起,延遲...你是對的。我相應地修改了我的答案:) – 2013-06-22 22:45:55

+0

非常好!我希望我們一起努力幫助他人。 – MikeSchinkel 2013-06-23 04:37:56

11

@PaBLoX提出了一個非常好的解決方案,但我自己做了一個解決方案,有點棘手,不需要每次查詢每個條款的所有帖子。以及如果單個職位分配了多個任期,該怎麼辦?它會不會多次渲染相同的帖子?

<?php 
    $taxonomy = 'my_taxonomy'; // this is the name of the taxonomy 
    $terms = get_terms($taxonomy, 'orderby=count&hide_empty=1'); // for more details refer to codex please. 
    $args = array(
     'post_type' => 'post', 
     'tax_query' => array(
        array(
         'taxonomy' => 'updates', 
         'field' => 'slug', 
         'terms' => m_explode($terms,'slug') 
        ) 
       ) 
     ); 

    $my_query = new WP_Query($args); 
    if($my_query->have_posts()) : 
     while ($my_query->have_posts()) : $my_query->the_post(); 

       // do what you want to do with the queried posts 

      endwhile; 
    endif; 
    ?> 

此功能m_explode是我放進functions.php文件的自定義功能。

function m_explode(array $array,$key = ''){  
     if(!is_array($array) or $key == '') 
      return;   
     $output = array(); 

     foreach($array as $v){   
      if(!is_object($v)){ 
       return; 
      } 
      $output[] = $v->$key; 

     } 

     return $output; 

     } 

UPDATE

我們不需要這個定製m_explode功能。 wp_list_pluck()函數完全一樣。所以我們可以簡單地用wp_list_pluck()代替m_explode(參數相同)。幹,對嗎?

+0

非常感謝!:)真的幫了我很多。 – Woppi 2017-05-11 07:32:22

0

在查詢循環中,您可以收集數組中的所有後期引用,並在稍後使用新的WP_Query。

$post__in = array(); 
while ($terms_query->have_posts()) : $terms_query->the_post(); 
    // Collect posts by reference for each term 
    $post__in[] = get_the_ID(); 
endwhile; 

... 

$args = array(); 
$args['post__in'] = $post__in; 
$args['orderby'] = 'post__in'; 
$other_query = new WP_Query($args); 
0

與帖子類型不同,WordPress沒有爲分類標準slug本身的路線。

爲了使分類塞本身列出分配有分類的任何條款的所有帖子,您需要使用EXISTS operator of tax_query in WP_Query

// Register a taxonomy 'location' with slug '/location'. 
register_taxonomy('location', ['post'], [ 
    'labels' => [ 
    'name' => _x('Locations', 'taxonomy', 'mydomain'), 
    'singular_name' => _x('Location', 'taxonomy', 'mydomain'), 
    'add_new_item' => _x('Add New Location', 'taxonomy', 'mydomain'), 
    ], 
    'public' => TRUE, 
    'query_var' => TRUE, 
    'rewrite' => [ 
    'slug' => 'location', 
    ], 
]); 

// Register the path '/location' as a known route. 
add_rewrite_rule('^location/?$', 'index.php?taxonomy=location', 'top'); 

// Use the EXISTS operator to find all posts that are 
// associated with any term of the taxonomy. 
add_action('pre_get_posts', 'pre_get_posts'); 
function pre_get_posts(\WP_Query $query) { 
    if (is_admin()) { 
    return; 
    } 
    if ($query->is_main_query() && $query->query === ['taxonomy' => 'location']) { 
    $query->set('tax_query', [ 
     [ 
     'taxonomy' => 'location', 
     'operator' => 'EXISTS', 
     ], 
    ]); 
    // Announce this custom route as a taxonomy listing page 
    // to the theme layer. 
    $query->is_front_page = FALSE; 
    $query->is_home = FALSE; 
    $query->is_tax = TRUE; 
    $query->is_archive = TRUE; 
    } 
} 
相關問題