web-dev-qa-db-fra.com

Postes de taxonomie sur la page d'archives


Bonjour, je suis perplexe depuis quelques jours sur un moyen idéal d’afficher les messages en utilisant mon type de message personnalisé (piste) et les taxonomies (genre, sub_genre). Quand un utilisateur accède à http://sitename.com/genre/ "sub_genre name", je souhaite que tous les messages de ce sub_genre soient classés par ceux-ci. taxonomies sub_genre avec contenu. ex..

http://sitename.com/genre/hip_hop

Genre: Ouest

piste d'essai junior

Genre: Vieille école

Chanson 3 piste

Titre du rap

Morceau 2 piste

C'est le code que j'utilise mais sa boucle est fausse ...

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post();
$cam_brands = get_the_terms( $post->ID, 'sub_genre' );?>
<?php foreach( $cam_brands as $brand ) : ?>
<h3 class="genre-title"> <?php echo $brand->name; ?> </h3>

<?php $wpq = array( 'post_type' => 'track', 'taxonomy' => 'sub_genre', 'term' => $brand->slug, 'post_status' => 'publish','posts_per_page' => -1, 'caller_get_posts'=> 1 );
$brand_posts = new WP_Query ($wpq);?>
<ul>
<?php foreach( $brand_posts->posts as $post ) : ?>
<li> <?php echo $post->post_title; ?> <a class="sc-player" href="<?php echo get('soundcloud_link'); ?>">track</a> </li>
<?php endforeach ?>
</ul>
<?php endforeach ?>
<?php endwhile; ?>
<?php endif; ?>

Il semble que cela se répète autant de fois qu'il y a de posts dans la taxonomie de genre plutôt que dans sub_genre.

ex.

Genre: Ouest

piste d'essai junior

Genre: Vieille école

Chanson 3 piste

Titre du rap

Morceau 2 piste

Genre: Vieille école

Chanson 3 piste

Titre du rap

Morceau 2 piste

Genre: Vieille école

Chanson 3 piste

Titre du rap

Morceau 2 piste

Toute aide s'il vous plaît s'il vous plaît s'il vous plaît serait apprécié. Mes compétences en php ne sont pas les meilleures et la boucle me fait un peu mal au cerveau. Merci

1
Khey

Ce que vous faites

Votre foreach est imbriquée dans while (have_posts()) : the_post();. Cette boucle while, parcourt chacun de vos messages (dans le genre 'hip_hop').

Ainsi, pour chaque article du genre 'hip_hop', vous trouverez les termes de taxonomie de l'article pour la taxonomie 'sub_genre' (il s'agit du contenu de $cam_brands). Ensuite, pour chaque terme associé (dans $cam_brands), vous obtenez toutes les publications associées à ce terme (ou $brand).

La dernière foreach boucle en boucle sur chacun de ces articles et les affiche.

Ce que je pense que vous essayez de faire

Je ne suis au courant d'aucun moyen simple et naturel utilisé par WordPress pour "scinder" tous les posts d'un terme de taxonomie particulier en enfants. Mais ce qui suit va le faire (mais pas de manière particulièrement efficace).

En outre, il apparaît que "sub_genre" est une taxonomie distincte de "genre" - ai-je raison? Si vous voulez une relation parent-enfant, vous devez simplement faire de 'genre' une taxonomie hiérarchique et créer des sous-genres de la même manière que vous créez 'sous-catégories'. Une fois que vous avez fait cela, ce qui suit devrait fonctionner avec les mises en garde ci-dessous.

$term = get_queried_object();

//Get all children of this term;
$children = get_terms( 'genre', 
    array(
        'parent'=>$term->term_id;
    ) ) ;

if($children):
    //We have an array of child (of current genre) terms. Loop through and display the posts
    foreach($children as $child):
        echo '<h2>'.$child->slug.'</h2>';

        // The Query - get all posts for this child-genre.
        $args = array('post_type' => 'track', 'taxonomy' => 'genre', 'term' => $child->slug, 'post_status' => 'publish','posts_per_page' => -1);
        $child_posts = new WP_Query ($args);

        // The Loop - display all posts for this child-genre.
        while ( $child_posts->have_posts() ) : $child_posts->the_post();
            echo '<li>';
                the_title();
            echo '</li>';
        endwhile;

        // Reset Post Data
        wp_reset_postdata();
    endforeach;
else:
    //On genre with no children - you may want to do something else.
    echo 'No sub-genre for this genre found';
endif;

Mises en garde

  • Ce code n'est pas testé: D (mais devrait fonctionner)
  • Il repose sur votre genre/sous-genres faisant tous partie d'un même hiérarchique
  • Visiter un genre sans enfants affichera le message "Pas de sous-genre".
  • Les pistes qui sont associées à un terme de genre, mais aucun de ses enfants ne sera affiché.
0
Stephen Harris