web-dev-qa-db-fra.com

Requête de poste de toutes les catégories avec la même étiquette sur 1 pages

Comment interroger les publications de catégories avec des tags spécifiques? Par exemple, si je visite " localhost/tag/tutorial ", la page d'archive affichera toutes les publications de toutes les catégories avec la balise tutorial.

Mais la vue serait séparée par catégorie. Par exemple:

Catégorie 1

  • Catégorie 1 Poste 1 avec balise de tutoriel
  • Catégorie 1 Post 2 avec balise de tutoriel

Catégorie 2

  • Catégorie 2 Post 2 avec balise de tutoriel
  • Catégorie 2 Post 10 Avec balise de tutoriel

NB: Les articles sont affichés dans chaque catégorie avec les mêmes tags.

J'ai un code qui montre les derniers messages dans chaque catégorie

<?php
        $categories = get_categories();
        foreach($categories as $category) { ?>

        <div class="CategoryPost">
          <h2><?php echo $category->name; ?></h2>
          <ul>
          <?php
            $post_args = array(
              'category' => $category->term_id,
              'numberposts' => 9999,
              'orderby'=> 'post_date',
              'order' => 'ASC',
              'post_type' => 'post'
            );

            $posts = get_posts($post_args);
            foreach($posts as $post) { ?>
              <li id="post-<?php the_ID(); ?>"><span><?php the_time('d M Y') ?></span> <i class="Seperate">&raquo;</i> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php } ?>
            </ul>
          </div>
        <?php }
        wp_reset_postdata(); ?>

Le code ci-dessus montrerait les derniers messages dans chaque catégorie avec ce look.

Nom de catégorie 1

  • Catégorie 1 Poste 1
  • Catégorie 1 Poste 2

Nom de catégorie 2

  • Catégorie 1 Poste 1
  • Catégorie 1 Poste 2

Nom de catégorie 3

  • Catégorie 1 Poste 1
  • Catégorie 1 Poste 2

Je voudrais faire une archive de balises qui fonctionne avec ce modèle et les messages seraient affichés dans chaque catégorie même les messages ont les mêmes balises.

1
GaroPpo

Cela aidera à obtenir le post de catégorie sur la page d'archive de balises. Faites le moi savoir.

<?php       

        $current_tag = single_tag_title( $prefix = '', $display = false );
        $categories = get_categories( array('hide_empty' => TRUE) );
        foreach($categories as $category) { ?>
        <?php
            $args=array(
                'posts_per_page' => -1, 
                'tag' => $current_tag,
                'cat' => $category->term_id,
            );

            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ) {
                ?>
                <div class="CategoryPost">
                    <h2><?php echo "Tag: " . $current_tag; ?></h2>
              <h2><?php echo "Category: " . $category->name; ?></h2>
              <ul>
              <?php
                echo '<ul>';
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<li>Post title: ' . get_the_title() . '</li>';
                }
                echo '</ul></ul></div><br>';
            } 
            ?>

        <?php } 
        wp_reset_postdata();
1
Sid

S'il vous plaît essayer celui-ci et laissez-moi savoir si cela aide.

<?php
        $categories = get_categories( array('hide_empty' => TRUE) );
    foreach($categories as $category) { ?>
    <?php
        $args=array(
            'posts_per_page' => -1, 
            'tag' => 'tutorial',
            'cat' => $category->term_id,
        );

        $the_query = new WP_Query( $args );

        if ( $the_query->have_posts() ) {
            ?>
            <div class="CategoryPost">
          <h2><?php echo $category->name; ?></h2>
          <ul>
          <?php
            echo '<ul>';
            while ( $the_query->have_posts() ) {
                $the_query->the_post();
                echo '<li>' . get_the_title() . '</li>';
            }
            echo '</ul></ul></div>';
        } 
        ?>

    <?php }
    wp_reset_postdata(); ?>

P.S. Je viens d'imprimer le titre de l'article. Si cela vous convient, veuillez ajouter d'autres paramètres à imprimer également.

Merci

EDIT: à afficher pour toutes les balises.

   <?php 
        $tags_array = get_tags();
        $categories = get_categories( array('hide_empty' => TRUE) );
        foreach($tags_array as $tag){
        foreach($categories as $category) { ?>
        <?php
            $args=array(
                'posts_per_page' => -1, 
                'tag_id' => $tag->term_id,
                'cat' => $category->term_id,
            );

            $the_query = new WP_Query( $args );

            if ( $the_query->have_posts() ) {
                ?>
                <div class="CategoryPost">
                    <h2><?php echo "Tag: " . $tag->name; ?></h2>
              <h2><?php echo "Category: " . $category->name; ?></h2>
              <ul>
              <?php
                echo '<ul>';
                while ( $the_query->have_posts() ) {
                    $the_query->the_post();
                    echo '<li>Post title: ' . get_the_title() . '</li>';
                }
                echo '</ul></ul></div><br>';
            } 
            ?>

        <?php } }
        wp_reset_postdata(); ?>
0
Sid

@GaroPpo Ici, il s'agit d'un code modifié que je vous ai suggéré. J'espère que cela vous remplira pleinement.

<?php
    $tag_id = array(12, 13, 14);
    $taxonomy = 'testimonial-category';
    $postType = 'testimonial';
    $terms = get_terms(['taxonomy' => $taxonomy, 'orderby' => 'term_id', 'hide_empty' => true]);
?> <div class="add-accordion"> <?php
    foreach($terms as $term){
        if($term->parent == 0){
            echo '<h3>' . $term->name . '</h3>';
            continue;
        }  $posts = get_posts(array('post_status' =>'publish','post_type' => $postType, 'tag__in' => $tag_id,
                array(
                    'taxonomy' => $taxonomy,
                    'field' => 'term_id',
                    'terms' => $term->term_id,
                ),));
        ?>
        <div class="add-accordion">
            <h3><?php echo $term->name ?></h3>
            <div class="add-accordion">
                <?php foreach($posts as $post){ ?>
                    <h3><?php echo $post->post_title ?></h3>
                    <div class="">
                        <?php echo get_the_content($post->ID) ?>
                    </div>
                <?php } ?>
            </div>
        </div>
        <?php
    }
?>
0
BlueSuiter