web-dev-qa-db-de.com

Abrufen von Beiträgen eines benutzerdefinierten Beitragstyps nach untergeordneten Kategorien einer übergeordneten Kategorie

Ich habe einen benutzerdefinierten Beitragstyp namens guides, es gibt 3 Kategorien, in denen sich ein Beitrag befinden kann, die 3 Kategorien sind untergeordnete Kategorien einer Kategorie mit der ID 87.

Momentan kann ich diese Kategorien durchlaufen und ihren Namen und/oder ihre ID anzeigen. Ich muss jede Kategorie durchlaufen und die Beiträge in dieser Kategorie anzeigen. Ich kann nicht herausfinden, wie. Dies ist der Code, den ich habe, der die Kategorien durchläuft und deren ID anzeigt. In dieser Schleife möchte ich die Beiträge anzeigen. Wie kann ich das machen?

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

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

Dein Start sieht schon ok aus. Sie müssen jetzt die Posts abrufen, die den term_id Ihres $category enthalten.

$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;

    }

}

Wie ich bereits erwähnt habe, geht aus Ihrer Frage nicht hervor, ob Sie die Standardtaxonomie "Kategorie" von WordPress oder eine benutzerdefinierte Taxonomie verwenden.

Wie Sie sehen können, ist dies nur ein Minimum an Code. Ich bin mir sicher, dass Sie es ein wenig erweitern müssen, zum Beispiel um Permalinks zum Post und so weiter hinzuzufügen.

Schauen Sie sich auch den Codex zur Funktion get_posts() an. Hier erhalten Sie einige Informationen zu taxonomy Abfragen mit get_posts().

Alle verwendbaren Taxonomieparameter finden Sie im Codex wp_query()hier .
Hier sehen Sie, dass Sie in einigen Fällen (zum Beispiel, wenn ein Beitrag mehreren Unterkategorien angehört) auch einen array of ID´s anstelle eines einzelnen term_id verwenden können, wie zum Beispiel:

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