get_categories() for only CPT

时间:2013-03-25 作者:Radi

在我正在工作的网站上,我有作为自定义帖子类型的作业和作为自定义分类法的位置。这些位置由作业、职位和其他CPT使用。

我正在为这些工作制作一个小过滤器,并希望将所有位置的列表显示为链接,单击其中一个后,它将对页面进行排序,以仅显示该位置的工作。使用简单链接查询。

我正在使用get_categories() 生成位置列表,但该函数的问题是,它不允许我指定帖子类型并显示所有具有任何类型帖子的位置。因此,我最终得到了一个并非所有位置都有工作的列表,当单击该链接时,它将显示404页。

            <?php      
          $args = array(
            \'type\'                     => \'post\', //changing this to jobs does not have any effect...
            \'child_of\'                 => 0,
            \'parent\'                   => 0,
            \'orderby\'                  => \'count\',
            \'order\'                    => \'DESC\',
            \'hide_empty\'               => 1,
            \'hierarchical\'             => 0,
            \'exclude\'                  => \'\',
            \'include\'                  => \'\',
            \'number\'                   => \'9999\',
            \'taxonomy\'                 => \'location\',
            \'depth\'                    => 0,
            \'pad_counts\'               =>  true);

          $categories = get_categories($args);
            $checked = false;
            foreach($categories as $category) {
              echo \'<li><a href="/jobs/?location=\'.$category->slug.\'">\'.$category->name.\'</a></li>\';
            } 
          ?>
如何告诉get\\u categories()只显示post\\u type=>作业?是否有其他方法显示位置列表并隐藏其中没有作业的位置?

提前感谢!

2 个回复
SO网友:Abhik

您应该使用wp_get_post_terms() 而不是get_categories(). 它返回与帖子关联的术语数组。

<?php
function get_my_custom_terms() {
    global $post;
    $myterms = wp_get_post_terms($post->ID, \'location\');

    if ($myterms) {
        foreach($myterms as $term) {
            $termname = $term->name;
            $term_link = get_term_link( $term->slug, \'location\' );
                if( is_wp_error( $term_link ) ) {
                    $termlink = $term_link;
                } else {
                    $termlink = \'/jobs/?location=\' .$term->slug;
                }
            echo \'<li><a href="\' . $termlink . \'">\'. $termname .\'</a></li>\';
        }
    }
}

SO网友:Tom J Nowell

get\\u categories没有post类型的概念,它只显示分类术语,而该术语post count。运行时不会生成日志计数,不同的日志类型也不会有不同的计数。

相反,要获得您想要的,您应该执行以下操作之一:

注册一个自定义计数回调,该回调将只对作业帖子进行计数。这样做的缺点是,计数将始终是工作岗位,其他岗位将无法拥有自己的计数

为作业位置创建分类。您试图做的事情没有承认作业的位置与职位或其他职位类型的位置不同,如果要单独列出和计数,则每个职位都应该有单独的位置分类法。

如果您需要更复杂的URL和分类法之间的比较,我建议您阅读以下内容:

http://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/

结束