web-dev-qa-db-fra.com

Besoin d'un extrait pour répertorier les balises spécifiques à une catégorie

Je suis à la recherche d'un extrait qui me permettra d'organiser les balises dans une catégorie donnée et de calculer le nombre de fois où cette balise a été utilisée. Exemple:

Nom de la catégorie: Photographie

  • Plantes (3)
  • Animaux (14)
  • Les gens (4)
  • Véhicules (2)

Jusqu'à présent, ce que j'ai est sous une requête personnalisée et est la suivante:

<h3>Identifying Terms Used</h3>
<ul>
    <?php $photographyTags = new WP_Query(array('category_name' => 'photography')); ?>
    <?php if($photographyTags->have_posts()) : while($photographyTags->have_posts()) : $photographyTags->the_post(); ?>
    <?php
        if(get_the_tag_list()) {
            echo get_the_tag_list('<li>','</li><li>','</li>');
        }
    ?>
    <?php endwhile; endif; ?>
</ul>

Il y a un problème unique avec ce morceau de code dans lequel, lorsque j'ai une étiquette qui a été utilisée plus d'une fois, le nom de l'étiquette se répète autant de fois qu'il a été utilisé. Ainsi, lorsque j’ai un nom de balise tel que Mesquite Tree et que je l’utilise 4 fois, je vois le mot Mesquite Tree répété 4 fois dans ma liste.

Toute aide serait extrêmement appréciée!

1
harshclimate

J'ai finalement trouvé une réponse. Cela ne fonctionnait pas les premières fois que je l'utilisais, mais après avoir retravaillé du HTML et mieux compris ce que je faisais, j'ai pu l'assembler. C'était à partir d'une réponse ici sur W.SE mais je ne peux plus le localiser:

<?php
    $custom_query = new WP_Query( array( 'cat' => get_query_var('cat') ) );

    if ( $custom_query->have_posts() ) :
       while ( $custom_query->have_posts() ) : $custom_query->the_post();
          $posttags = get_the_tags();
          if ( $posttags ) {
             foreach( $posttags as $tag ) {
                $all_tags[] = $tag->term_id;
             }
           }
        endwhile;
    endif;

    $tags_arr = array_unique($all_tags); $tags_str = implode(",", $tags_arr);

    $args = array(
        'smallest'  => 14,      'largest'    => 14,
        'unit'      => 'px',    'number'     => 0,
        'format'    => 'list',  'show_count' => 1,
        'include'   => $tags_str
    );
    wp_tag_cloud($args);
?>

Ce que je peux en déduire, c'est que nous devons utiliser une boucle distincte et appeler un nouveau WP_Query.

Cette requête utilise un tableau pour extraire la catégorie sur laquelle l'utilisateur a cliqué. Une fois que cela se produit, les tags répertoriés dans cette catégorie sont rassemblés et disposés dans un nuage de tags.

Ensuite, nous retravaillons le nuage de tags pour l’afficher dans une liste au lieu du format de nuage typique. J'ai ajouté show_count => 1 pour montrer combien de fois une balise particulière a été utilisée.

Je vais poster la page sur mon site Web que je l'ai utilisée pour que vous puissiez la voir en action. Bien sûr, je ne le ferai pas avant que ce soit fait :)

0
harshclimate