抱歉——stackexchange是新手,实际上在Stack Overflow中发布了这篇文章,因为我不知道有一个特定于WP的关节。
我的问题--
What I Have: 我有工作事件列表的代码。有一个自定义帖子(事件)和三个分类法(位置、月份、类型)。以下代码列出了未来的事件,并按自定义字段(start\\u date)对其排序。事件列表也可以按分类法排序。例如,您可以只查看12月(月)的事件,或按位置查看事件(蒙大拿州)。
What I Can\'t Figure Out: 如何按两种不同的分类法对列表进行排序。例如:12月(月)的活动,也在蒙大拿州(地点)。它似乎只是选择了其中一个。
Other Info: 使用标准Wordpress循环(而不是下面的自定义循环)时,使用此CPT和分类法进行多个查询没有问题,但当然,它会发布所有发生的事件,包括过去发生的事件。
此外,这是我的第一个wp\\U查询,所以我希望这是显而易见的。
文件:(archives events.php)
<?php
$today = date(\'Ymd\');
$my_query = new WP_Query( array(
\'post_type\' => \'events\',
\'tax_query\' => array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'location\',
\'terms\' => $term,
),
array(
\'taxonomy\' => \'month\',
\'terms\' => $term,
),
array(
\'taxonomy\' => \'type\',
\'terms\' => $term,
)),
\'posts_per_page\' => 10,
\'meta_compare\' => \'>\',
\'meta_value\' => $today,
\'orderby\' => \'meta_value\',
\'meta_key\' => \'start_date\',
\'order\' => \'ASC\',
\'paged\'=> $paged,
)); ?>
<?php if ( $my_query->have_posts() ) : while ($my_query->have_posts() ) : $my_query->the_post();?>
<!-- OUTPUT OF QUERY -->
<?php endwhile;
wp_reset_postdata();
endif; ?>
SO网友:kevin
以下是使用多个分类法进行查询的函数:
function posts_search ($post_type,$taxonomies) { // $taxonomies should be an array (\'taxonomy\'=>\'term\', \'taxonomy2\'=>\'term2\')
foreach ($taxonomies as $key=>$value) {
$args=array(\'post_type\'=>$post_type,\'post__in\'=>$ids,$key=>$value);
unset($ids); $ids=array();
foreach($posts=get_posts($args) as $post) { $ids[]=$post->ID; }
if (empty($ids)) return false;
}
return $posts;
}
下面是我在过去的项目中如何使用它的一个示例:
$posts = posts_search (\'produtos\',array(\'prod-categoria\'=>\'blocos\',\'prod-cols\'=>\'7-c\'));
if($posts) {
foreach($posts as $post) {
// show infos from the post...
}
}
The
produtos
是我正在搜索的自定义帖子类型,
prod-categoria
和
prod-cols
是两种自定义分类法和
blocos
和
7-c
是以前自定义分类法中的两个术语。
希望这有帮助。
OBS1;这个函数不是我写的,但可能来自这里的一个老帖子。OBS2;这在3.1.2安装中起作用。