web-dev-qa-db-ja.com

親カテゴリの子カテゴリでカスタム投稿タイプから投稿を取得する

私はguidesと呼ばれるカスタム投稿タイプを持っています、投稿が入ることができる3つのカテゴリーがあります、3つのカテゴリーはidが87のカテゴリーの子カテゴリーです。

現在私はこれらのカテゴリをループしてそれらの名前やIDを表示することができます。各カテゴリをループして、そのカテゴリの投稿を表示する必要があります。私はその方法を理解できないようです。これは私が持っているコードで、カテゴリをループしてそれらのIDを表示します。このループで私は投稿を表示したいと思います。これどうやってするの?

$categories = get_categories( array(
    'orderby' => 'name',
    'child_of'  => 87,
    'order'   => 'ASC'
) );

foreach( $categories as $category ) {
    echo $category->term_id;
}
1
Duck of Death

あなたのスタートはもう大丈夫ですね。 term_id$categoryを含む投稿を取得する必要があります。

$categories = get_categories( array(
    'orderby' => 'name',
    'child_of'  => 87,
    'order'   => 'ASC'
) );

foreach( $categories as $category ) {

    // display current term name
    echo $category->name;

    // display current term description, if there is one
    echo $category->description;

    // get the current term_id, we use this later in the get_posts query
    $term_id = $category->term_id;

    $args = array(
        'post_type' => 'guides', // add our custom post type 
        'tax_query' => array(
            array(
                'taxonomy' => 'category', // the taxonomy we want to use (it seems you are using the default "category" )
                'field' => 'term_id', // we want to use "term_id" so we can insert the ID from above in the next line
                'terms' => $term_id // use the current term_id to display only posts with this term
            )
        )
    );
    $posts = get_posts( $args );

    foreach ($posts as $post) {

        // display post title
        echo $post->post_title;

        // display post excerpt
        echo $post->post_excerpt;

        // or maybe you want to show the content instead use ...
        #echo $post->post_content;

    }

}

私が指摘したように、あなたがワードプレスのデフォルトの「カテゴリ」分類法またはカスタム分類法を使用しているかどうかはあなたの質問からは明らかではない。

ご覧のとおり、これは最低限必要なコードです。だから私はあなたがそれを少し拡張する必要があるだろうことを確信しています、例えば投稿やものにパーマリンクを追加すること。

get_posts()関数に関するコーデックスも見てください。 ここget_posts()を持つtaxonomyクエリについての情報を得ます。

使用可能なすべての分類パラメーターについては、wp_query() codex here をご覧ください。
ここでは、場合によっては(投稿が複数のサブカテゴリに属している場合など)、単一のarray of ID´sではなくterm_idを使用できることもあります。

'field'    => 'term_id',
'terms'    => array( 103, 115, 206 ),
1
LWS-Mo