Disons que je dois implémenter les éléments suivants dans WordPress:
J'ai un CPT nommé 'chanson' qui sont des chansons uniques d'artistes différents. Parfois, les chansons peuvent être regroupées par albums, mais pas toujours.
Ensuite, je veux afficher les dernières versions sur ma page d'accueil, comme:
DERNIÈRES COMMUNIQUÉS
etc..
La règle consiste donc à afficher tous les articles, du plus récent au plus ancien, mais s'ils appartiennent à un groupe, affichez le groupe à la place, en utilisant la date de publication la plus récente dans le groupe pour trier le groupe avec d'autres articles.
Voyez-vous comment créer cela dans WordPress? Avec une taxonomie personnalisée CTP +? Ou 2 CPT (1 album, 1 chanson)?
J'ai déjà fait cela avec 2 CPT (1 album, 1 chanson):
Mais cela sonnait hacky à l’époque. Voyez-vous un meilleur moyen de gérer ce comportement? Et si je veux utiliser une taxonomie au lieu d'un CPT? Pour ce qui est de l'expérience utilisateur, les utilisateurs préféreraient ajouter des étiquettes aux chansons plutôt que de créer manuellement un album et d'y ajouter des chansons.
Cela ressemble à un modèle très courant mais je ne trouve pas la bonne façon de le faire :(
Une taxonomie personnalisée est parfaitement logique - en espérant que je n’ai pas oublié quelque chose:
$songs = get_posts(
array(
'post_type' => 'song',
)
);
$index = array(); // Build an album_id => songs index
foreach ( $songs as $song ) {
if ( $albums = get_the_terms( $song->ID, 'album' ) )
$index[ $albums[0]->term_id ][] = $song;
else
$index[ count( $index ) - 1 ][] = $song; // All on it's own. Negative index will not clash with album ID
}
echo '<ul class="songs">';
foreach ( $index as $album_id => $songs ) {
if ( count( $songs ) > 1 ) // More than one song in this album?
echo '<li class="album">' . get_term_field( 'name', $album_id, 'album' ) . '<ul>';
foreach ( $songs as $song )
echo '<li>' . get_the_title( $song ) . '</li>';
if ( count( $songs ) > 1 )
echo '</ul></li>';
}
echo '</ul>';
$index
héritera de l'ordre de $songs
selon le type de requête. Quand une chanson appartient à un album, toutes les chansons suivantes de cet album sont ajoutées à la pile et apparaîtront dans la liste imbriquée où la première chanson est indexée.