web-dev-qa-db-ja.com

cPT専用のget_categories()

私が取り組んでいるサイトでは、カスタム投稿タイプとしてJobs、カスタム分類としてLocationsがあります。場所は、Job、Post、およびその他のCPTによって使用されます。

私は仕事のための小さなフィルタに取り組んでいて、あなたが1つをクリックした後それがその場所の仕事だけを示すためにページを分類するリンクとしてすべての場所のリストを見せたいです。単純なリンククエリを使用する.

私は get_categories() を使って場所のリストを生成していますが、この関数の問題点はPost Typeを指定できずすべてを表示することですあらゆる種類の投稿がある場所。だから私はすべての仕事を持っていない場所のリストになってしまい、リンクをクリックすると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_categories()にpost_type => Jobだけを表示するように指示するにはどうすればいいですか?場所のリストを表示し、そこに仕事がない場所を非表示にする別の方法はありますか?

前もって感謝します!

1
Radi

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>';
        }
    }
}
1
Abhik

get_categoriesには投稿タイプの概念はなく、分類用語とその用語投稿数のみが表示されます。投稿数は実行時には生成されず、投稿の種類ごとに異なる数もありません。

代わりに、欲しいものを手に入れるには、次のいずれかを実行する必要があります。

  • カスタムカウントコールバックを登録します。これは求人の投稿のみをカウントします。これのマイナス面は、カウントが常に求人の投稿であるということです、他の投稿は彼ら自身のカウントを持つことができないでしょう。
  • リストに求人のみを表示するように強制します。しかしながら、これは他の投稿タイプのリストを妨げるでしょう。

最後に、私のお勧めの方法:

職場の分類法を作成します。あなたがやろうとしていることは、求人の所在地が役職や他の役職の種類の所在地と同じではないことを認めることに失敗しています。

それならあなたがもっと複​​雑なURLと分類法の間の比較をする必要があるならば、私はこれを読み物として提案する:

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

0
Tom J Nowell