web-dev-qa-db-fra.com

Obtenir des publications à partir d'un type de publication personnalisé par catégories enfants d'une catégorie parente

J'ai un type de message personnalisé appelé guides, il y a 3 catégories dans lesquelles un message peut être, les 3 catégories sont des catégories enfants d'une catégorie avec l'ID 87.

Actuellement, je peux parcourir ces catégories et afficher leur nom et/ou identifiant. Je dois parcourir chaque catégorie et afficher les messages de cette catégorie. Je n'arrive pas à comprendre comment. C'est le code que j'ai qui parcourt les catégories et affiche leur ID. Dans cette boucle, je voudrais afficher les messages. Comment puis-je faire ceci?

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

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

Ton début semble déjà bien. Vous devez maintenant obtenir les articles qui ont le term_id de votre $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;

    }

}

Comme je l'ai indiqué, votre question ne précise pas si vous utilisez la taxonomie par défaut de "catégorie" de wordpress ou une taxonomie personnalisée.

Comme vous pouvez le constater, il s’agit d’un code minimal. Donc, je suis sûr que vous aurez besoin de l’étendre un peu, par exemple en ajoutant des permaliens à la publication.

Consultez également le codex concernant la fonction get_posts(). Ici vous obtenez des informations sur taxonomy requête avec get_posts().

Pour tous les paramètres de taxonomie utilisables, visitez le wp_query() codex here .
Ici, vous verrez que dans certains cas (par exemple, si un article est dans plusieurs sous-catégories), vous pouvez également utiliser un array of ID´s au lieu d'un seul term_id, comme ceci:

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