it-swarm.com.de

Alles auswählen in Elternkategorie, Nach Kindkategorie gruppieren?

Ich versuche, einen benutzerdefinierten Beitragstyp für eine "Serie" zu formatieren. Jeder Beitrag ist eine Episode, jede Episode gehört zu einer Staffel und jede Staffel gehört zu einer Serie (genau wie eine Fernsehsendung).

Ich habe Folgendes:

  • Benutzerdefinierter Beitragstyp: "Episoden"
  • Benutzerdefinierte Taxonomie: "Serie"
    • Inside Series, Elternkategorie von "Real Deal"
      • Innerhalb der Kategorie "Real Deal" mehrere Unterkategorien (IE "Season 1", "Season 2" ..)

Ich muss in der Lage sein, meine "Folgen" sowohl nach Serie (IE, "Real Deal" oben) als auch nach Staffel (IE, "Staffel 1" von Real Deal) auszuwählen.

Ein Bild sagt mehr als tausend Worte. Hier ein kurzer Überblick über das, was ich meine:

enter image description here

WAS ICH VERSUCHT HABE

Hier ist der Code, den ich derzeit habe, aber ich glaube nicht, dass ich auf dem richtigen Weg bin, um das zu tun, was ich oben illustriert habe. Dadurch erhalte ich alle Episoden für Staffel 1. Allerdings muss ich alle Episoden für jede Staffel herunterladen und dann jede Staffel in einem eigenen HTML-Container gruppieren.

<?php
  $args = [
      'post-type'   => 'episode',
      'post-status' => 'publish',
      'tax_query'   => [
          [
              'taxonomy' => 'series',
              'field'    => 'slug',
              'terms'    => 'season-1'
          ]
      ]
  ];
  $episodes = new WP_Query($args);
  if ( $episodes->have_posts() ) {
    while( $episodes->have_posts() ) {
        $episodes->the_post();
        get_template_part('content','episodes');
    }
  } else {
    get_template_part('content', 'none');
  }
?>

FRAGE

Wie kann ich meine Abfrage strukturieren? A) Wählen Sie alle Episoden aus, die nach Serien gruppiert und dann nach Staffeln angezeigt werden.

EDIT:

Am Ende habe ich das von Michael Ecklund bereitgestellte dritte Code-Snippet verwendet. Es hat genau das erreicht, wonach ich gesucht habe - die vier neuesten Posts in jeder Saison wurden abgerufen und in einem Array gespeichert. Danke für deine Hilfe!

5
Prefix

Hier ist eine einfache Lösung. Benötigt allerdings die aktuellste Version von WordPress. (oder mindestens 4.1)

Verwenden verschachtelter Taxonomie-Abfragen.

Nehmen Sie, was Sie haben, und fügen Sie es ein wenig hinzu.

$args = array(
    'post-type'      => 'episode',
    'post-status'    => 'publish',
    'posts_per_page' => 4,
    'tax_query'      => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'series',
            'field'    => 'slug',
            'terms'    => array( 'real-deal' ),// Name of the series (in slug format)
        ),
        array(
            'taxonomy' => 'series',
            'field'    => 'slug',
            'terms'    => array( 'season-1' ),// Name of the season (in slug format)
        )
    )
);

$episodes = new WP_Query( $args );

print_r( $episodes->posts );

Das heißt, Sie suchen nach den 4 neuesten Folgen, die zu einer bestimmten Serie gehören und auch eine bestimmte Staffel enthalten. (Dies scheint das zu sein, was Ihre visuellen Modelle darstellen.)

Sie haben erwähnt, dass die "Jahreszeiten" dynamisch sein müssen.

Auf diese Weise können Sie alle "Unterkategorien" (Staffeln) aus der übergeordneten Kategorie (Serie) abrufen und anschließend die 4 neuesten Folgen aus dieser Serie in allen möglichen Staffeln abrufen.

$taxonomy = 'series';

$seasons = get_terms( $taxonomy, array(
    'parent' => 1, // TERM ID OF THE SERIES
    'fields' => 'id=>slug'
) );

if ( ! empty( $seasons ) && ! is_wp_error( $seasons ) ) {

    $args = array(
        'post-type'      => 'episode',
        'post-status'    => 'publish',
        'posts_per_page' => 4,
        'tax_query'      => array(
            'relation' => 'AND',
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => array( 'industry-news' ),// Name of the "series" (in slug format)
            ),
            array(
                'taxonomy' => $taxonomy,
                'field'    => 'slug',
                'terms'    => array_values( $seasons ),// Name of the "seasons" (in slug format) DYNAMIC
            )
        )
    );

    $episodes = new WP_Query( $args );

    print_r( $episodes->posts );

}

Nehmen wir an, Sie haben 3 Staffeln in einer Serie ... und Sie möchten die 4 neuesten Folgen jeder Staffel in dieser Serie anzeigen.

$taxonomy = 'series';

$seasons = get_terms( $taxonomy, array(
    'parent' => 1, // TERM ID OF THE SERIES
    'fields' => 'id=>slug'
) );

$season_episodes = array();

if ( ! empty( $seasons ) && ! is_wp_error( $seasons ) ) {

    foreach ( array_values( $seasons ) as $season ) {

        $season_episodes[ $season ] = array();// Placeholder in-case there's no episodes found.

        $args = array(
            'post-type'      => 'episode',
            'post-status'    => 'publish',
            'posts_per_page' => 4,
            'tax_query'      => array(
                'relation' => 'AND',
                array(
                    'taxonomy' => $taxonomy,
                    'field'    => 'slug',
                    'terms'    => array( 'industry-news' ),// Name of the "series" (in slug format)
                ),
                array(
                    'taxonomy' => $taxonomy,
                    'field'    => 'slug',
                    'terms'    => array( $season ),// Name of the "seasons" (in slug format) DYNAMIC
                )
            )
        );

        $episodes = new WP_Query( $args );

        if ( ! empty( $episodes->posts ) ) {
            $season_episodes[ $season ] = $episodes->posts;// Add all episodes found in this season.
        }

    }

}

if ( ! empty( $season_episodes ) ) {
    print_r( $season_episodes );
}

Bei dieser letzten Methode werden die letzten 4 Folgen einer Reihe verwendet, um diese 4 Beiträge in separate, nach Jahreszeiten geordnete Arrays zu ordnen.

Also alles gesagt und getan, Sie haben eine Reihe für jede Staffel in der Serie mit 4 letzten Folgen. Sie müssen lediglich die Informationen ausgeben.

4
Michael Ecklund