如何获取仅在某些帖子类型中使用的分类术语列表?

时间:2012-09-23 作者:unfulvio

我有一个名为“位置”的自定义分类法,它在一系列帖子类型中共享。我想制作一个我的位置(术语)的选择字段下拉列表,让用户进入每个特定位置的分类术语页面;然而,我想排除一些在一种帖子类型中使用的术语,而在其他帖子类型中可能不使用。

有没有办法做到这一点?

1 个回复
最合适的回答,由SO网友:user34682 整理而成

我不是程序员,所以可能有一种更有效/正确的方法来实现这一点。

将其放入函数中。php或自定义插件:

function get_terms_by_post_type( $taxonomies, $post_types ) {
    global $wpdb;
    $query = $wpdb->get_results( "SELECT t.*, COUNT(*) from $wpdb->terms AS t INNER JOIN $wpdb->term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN $wpdb->term_relationships AS r ON r.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->posts AS p ON p.ID = r.object_id WHERE p.post_type IN(\'".join( "\', \'", $post_types )."\') AND tt.taxonomy IN(\'".join( "\', \'", $taxonomies )."\') GROUP BY t.term_id");
    return $query;
}

function show_post_type_terms($taxonomy, $posttype = null ) {
   global $post;
   if(!isset($posttype)) $posttype = get_post_type( $post->ID );
   $terms = get_terms_by_post_type( array($taxonomy), array($posttype) );
   echo \'<ul>\';
   foreach($terms as $term) {
      $output = \'<li><a href="\'.get_bloginfo(\'url\').\'/\'.$taxonomy.\'/\'.$term->slug.\'/?post_type=\'.$posttype.\'">\'.$term->name.\'</a></li>\';
      echo $output;
   }
   echo \'</ul>\';
}
用法示例:

放置<?php show_post_type_terms(\'taxonomy_name\'); ?> 进入自定义帖子类型存档模板文件,以显示taxonomy\\u name的术语列表,排除当前自定义帖子类型的帖子未使用的所有术语,并链接到仅显示该特定帖子类型的帖子的术语存档

  • 放置<?php show_post_type_terms(\'taxonomy_name\', \'custom_post_type_name\'); ?> 在任何其他模板文件中,对特定的自定义帖子类型执行相同的操作[show_post_type_terms taxonomy="taxonomy_name" posttype="post_type_name"]. 如果您正在查找此代码,请告诉我
  • 改编自this. ($wpdb->prepare已更改为$wpdb->get\\u results,原因是this)

    结束

    相关推荐

    排除wp_list_ages中的当前页面

    我正在使用wp_list_pages() 显示子页面菜单。结构简单美观。如下所示:http://cl.ly/image/0w1Q1q2D3D18在子页面上时,菜单工作正常:http://cl.ly/image/3O310E0s2B3d但是,唉,在父页面上时不起作用:http://cl.ly/image/3w0T3Q2s4347看起来很简单,但我就是不知道到底是怎么回事。这是我的wp_list_pages() 代码:<?php $topmost_parent