web-dev-qa-db-ja.com

特定のカテゴリの用語の一覧を取得する

私はNewsというカテゴリと、Filtersというカスタム分類法があります。これは階層的分類法です。

ユーザーが投稿を作成するときに、ニュースの下のサブカテゴリとフィルター分類の下のサブフィルターを選択します。

現在、ユーザーが/ newsに移動したときに、すべての「サブカテゴリ」と「フィルタ」を一覧表示しようとしています。

「ニュース」カテゴリのサブカテゴリを一覧表示するのは簡単でした。しかし、分類「フィルタ」のすべての「サブフィルタ」をカテゴリ「ニュース」のみに限定する方法を考え出すことはできないようです。

これが、カテゴリーnewsのサブカテゴリーのリストを取得するために使用したコードです。

function get_child_categories()
{
    if (is_category()) {
        $thiscat = get_category(get_query_var('cat'));
        $catid = $thiscat->cat_ID;
        $args = array('parent' => $catid);
        $categories = get_categories($args);

        return $categories;
    }

    return false;
}

私は、分類法「フィルター」のすべての用語をリストアップするが、カテゴリー「ニュース」に限定される同様の機能を望んでいました。これは私が達成しようとしていることのスクリーンショットです。

下のスクリーンショットでは、 '/ news'は管理領域の 'News'カテゴリに関連しています。そのため、ユーザーが/ newsにアクセスした場合、フロントエンドは 'News'カテゴリのすべての投稿を一覧表示する必要があります。

このページには、カテゴリ「ニュース」の下のすべてのサブカテゴリも表示されます。これは、サブカテゴリの水平方向のリストからわかるように行われます。

これで、ユーザは管理UIで表示されるようにフィルタを選択することもできます。私が達成しようとしているのは、「ニュース」の下に分類される可能性のある投稿のすべてのフィルタを一覧表示し、「フィルタ」の下の横のリストに表示することです。これは、ユーザーが[World News]などをクリックして[World News]のフィルタがオンになっている投稿のみを一覧表示するときに投稿をフィルタリングするために使用されます。

enter image description here 

投稿を編集するときの管理領域の現在のカテゴリ/分類

enter image description here 

1
Niraj Pandey

次のコードはそれを行います。以下のコードの 'filter'テキストを、設定したフィルタ分類名に変更してください。

if(is_category() ){

    $thiscat = get_queried_object_id(); 
    $filter_tax = array();
    $args = array( 'category' => $thiscat );
    $lastposts = get_posts( $args );

    foreach ( $lastposts as $post ){
        setup_postdata( $post );
        $terms = get_the_terms( $post->ID, 'filter' ); // Change the taxonomy name here

        if ( $terms && ! is_wp_error( $terms ) ){

         foreach ( $terms as $term ) {
            $filter_tax[] = $term;
         }

        }
    }
    wp_reset_postdata();

    if( !empty($filter_tax) ){
        print_r($filter_tax);
    } else {
        echo 'No filter set.';
    }

}
2
Vinod Dalvi

私はあなたが何を求めているのか理解しているかどうか私にはわかりませんが、私はこれがあなたを助けてくれることを願っています -

現在のカテゴリのすべてのサブカテゴリを取得

$args = array('parent' => 17); // Or get queried object for ID
$categories = get_categories( $args );

すべてのレベルからすべてのサブカテゴリを取得する

$args = array('child_of' => 17); // Or get queried object for ID
$categories = get_categories( $args );

カスタム分類法に基づくすべてのカテゴリの取得

$terms = get_terms(array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false,
));
1
Neit