[英]Get all posts from custom taxonomy in Wordpress
有没有办法从 Wordpress 的分类中获取所有帖子?
在taxonomy.php
中,我有这段代码可以从与当前术语相关的术语中获取帖子。
$current_query = $wp_query->query_vars;
query_posts( array( $current_query['taxonomy'] => $current_query['term'], 'showposts' => 10 ) );
无论术语如何,我想创建一个包含分类中所有帖子的页面。
有没有一种简单的方法可以做到这一点,或者我必须查询术语的分类,然后循环遍历它们,等等。
@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
(参数会相同)。 干,对吗?
$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;
我很张贴类似的东西在这里 。
与帖子类型不同,WordPress没有分类标本本身的路由。
要使分类标本本身列出所有分配了任何分类术语的帖子,您需要在tax_query
中使用WP_Query
的EXISTS
运算符 :
// 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;
}
}
在术语的查询循环中,您可以收集数组中的所有帖子引用,并在稍后的新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 );
<?php
get_posts(array(
'post_type' => 'gallery',
'tax_query' => array(
array(
'taxonomy' => 'gallery_cat',
'field' => 'term_id',
'terms' => 45)
))
);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.