web-dev-qa-db-fra.com

Augmenter le décalage en boucle

J'écris un plugin de publication personnalisé qui affiche les publications personnalisées dans des groupes sous forme d'onglets. Pour chaque groupe 4 post. Est-il possible d'écrire une requête avec offset qui augmentera à chaque boucle? Donc, le résultat serait:
- la première requête affiche les messages de 1 à 4
- la deuxième requête affiche les messages de 5 à 8
- la troisième requête affiche les messages de 9 à 12, etc.

        <div class="official-matters-tabs">
          <?php $args = array('post_type' => 'official-matters', 'showposts' => 4, 'orderby' => 'date', 'order' => 'ASC',); $the_query = new WP_Query( $args ); ?>
          <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
          <div class="info-tab col-xl-3">
            <div class="info-img">
              <?php the_post_thumbnail(); ?>
            </div><!-- .info_img -->
            <a data-toggle="collapse" href="#collapse-<?php the_ID(); ?>" class="info-title" role="button" aria-expanded="false" aria-controls="collapse-<?php the_ID(); ?>">
              <?php the_title(); ?>
            </a>
          </div><!-- .info-tab -->
        <?php endwhile;?>
        <?php wp_reset_postdata(); ?>
        </div><!-- .official-matters-tabs -->

        <div class="official-matters-content">
          <?php $args = array('post_type' => 'official-matters', 'showposts' => 4, 'orderby' => 'date', 'order' => 'ASC',); $the_query = new WP_Query( $args ); ?>
          <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
          <div class="info-tab-content collapse" id="collapse-<?php the_ID(); ?>">
            <div class="card card-body">
                <?php the_excerpt(); ?>
            </div><!-- .card -->
          </div><!-- .info-tab-content -->
        <?php endwhile;?>
        <?php wp_reset_postdata(); ?>
        </div><!-- .official-matters-content -->

      </div><!-- .official-matters-group -->
  </div><!-- #collapse-official-matters -->

MIS À JOUR

J'ai apporté les modifications que vous avez suggérées. Mon plus gros problème en ce moment avec la requête est la sortie que je reçois:

<div class="official-matters-group">
 <div class="official-matters-tabs">
  <div class="info-tab col-xl-3">
    ...
  </div>
</div>
<div class="official-matters-content">
 <div class="info-tab-content collapse">
  ...
 </div>
 <div class="official-matters-tabs">
   <div class="info-tab col-xl-3">
   ...
   </div>
</div>
<div class="official-matters-content">
   <div class="info-tab-content collapse">
   ...
   </div>
   <div class="official-matters-tabs">
      <div class="info-tab col-xl-3">
      ...
      </div>
   </div>
</div>

et ce dont j'ai besoin c'est:

<div class="official-matters-group">
 <div class="official-matters-tabs">
  <div class="info-tab col-xl-3">
   ...
  </div>
  <div class="info-tab col-xl-3">
   ...
  </div>
  <div class="info-tab col-xl-3">
   ...
  </div>
  <div class="info-tab col-xl-3">
   ...
  </div>
 </div>
 <div class="official-matters-content">
  <div class="info-tab-content collapse">
   ...
  </div>
  <div class="info-tab-content collapse">
   ...
  </div>
  <div class="info-tab-content collapse">
   ...
  </div>
  <div class="info-tab-content collapse">
   ...
  </div>
</div> 

J'ai besoin des 4 articles groupés en groupe de questions officielles et mis en boucle autant de fois que nécessaire jusqu'à ce que tous les articles soient affichés. Et je ne sais pas comment le faire.

alors maintenant, mon code de requête ressemble à ceci:

        <?php global $duplicated_posts;
          $args = [
              'post_type' => 'official-matters',
              'showposts' => 20,
              'orderby' => 'date',
              'order' => 'ASC',
              'post__not_in' => $duplicated_posts
          ];
          $query = new \WP_Query($args); ?>

          <div class="official-matters-group">
            <?php if( $query->have_posts() ) : ?>
              <?php while( $query->have_posts() ) : $query->the_post();
                    $duplicated_posts[] = get_the_ID();
              ?>
                <div class="official-matters-tabs">
                  <div class="info-tab col-xl-3">
                    <div class="info-img">
                      <?php the_post_thumbnail(); ?>
                    </div><!-- .news_img -->
                    <a data-toggle="collapse" href="#collapse-<?php the_ID(); ?>" class="info-title" role="button" aria-expanded="false" aria-controls="collapse-<?php the_ID(); ?>">
                      <?php the_title(); ?>
                    </a>
                  </div>
                </div><!-- .official-matters-tabs -->

                <div class="official-matters-content">
                  <div class="info-tab-content collapse" id="collapse-<?php the_ID(); ?>">
                    <div class="card card-body">
                        <?php the_content(); ?>
                    </div><!-- .card -->
                  </div><!-- .info-tab-content -->
                 </div><!-- .offical-matters-content -->
                <?php
                endwhile;
                wp_reset_postdata();
              endif;
            ?>
        </div><!-- .official-matters-group -->
    </div><!-- .collapse-official-matters -->

MIS À JOUR

Jusqu'ici je suis arrivé à ce point:

<div id="collapse-official-matters" class="col-xl-12">
   <div class="official-matters-group">

     <?php
      $args = array(
        'post_type' => 'sprawy-urzedowe',
        'showposts' => 20,
        'orderby' => 'date',
        'order' => 'ASC',
        'post__not_in' => $duplicated_posts
     );

     $the_query = new WP_Query($args);
     if ($the_query->have_posts()) :
       $counter = 0;
       while ($the_query->have_posts()) : $the_query->the_post();
           if ($counter % 4 == 0) :
               echo $counter > 0 ? '</div>' : '';
               echo '<div class="official-matters-tabs">';
           endif;
           ?>

           <div class="info-tab col-xl-3">
             <div class="info-img">
               <?php the_post_thumbnail(); ?>
             </div><!-- .news_img -->
             <a data-toggle="collapse" href="#collapse-<?php the_ID(); ?>" class="info-title" role="button" aria-expanded="false" aria-controls="collapse-<?php the_ID(); ?>">
               <?php the_title(); ?>
             </a><!-- .info-title -->
           </div><!-- .info-tab -->

     <?php
       $counter++;

       endwhile;
       endif;
       wp_reset_postdata();
     ?>
   </div>


   </div><!-- .official-matters-group -->
</div><!-- .collapse-official-matters -->

mais je ne sais pas comment ajouter le code ci-dessous pour obtenir le résultat dont j'ai besoin

<div class="official-matters-content">
  <div class="info-tab-content collapse" id="collapse-<?php the_ID(); ?>">
    <div class="card card-body">
        <?php the_content(); ?>
    </div><!-- .card -->
  </div><!-- .info-tab-content -->
</div>
1
Dariusz

Après une longue période, nous avons trouvé la solution. Peut-être que cela aidera quelqu'un dans le futur.

  <div id="collapse-official-matters" class="col-xl-12">
       <div class="official-matters-group">

         <?php $args = array('post_type' => 'official-matters', 'showposts' => 20, 'orderby' => 'date', 'order' => 'ASC',); $the_query = new WP_Query( $args ); ?>
         <?php $i = 0; $row = 0;
          while ( $the_query->have_posts()) {

            $the_query->the_post();
            if ($i === 4) {
              $i = 0;
              $row++;
            }

            $postsData[$row]['tabs'][$i] = [
              'id' => get_the_id(),
              'thumbnail' => get_the_post_thumbnail_url(),
              'title' => get_the_title()
            ];

            $postsData[$row]['content'][$i] = [
              'id' => get_the_id(),
              'excerpt' => get_the_excerpt()
            ];

            $i++;
          }
         ?>

         <div id="accordion">
         <?php foreach($postsData as $key => $value) :
           $tabs = $value['tabs'];
           $contents = $value['content'];
           ?>
             <div class="customRow">
               <?php foreach($tabs as $key => $value) : ?>
                 <div class="info-tab col-xl-3">
                   <div class="info-img">
                     <img src="<?php echo $value['thumbnail'] ?>" />
                   </div><!-- .news_img -->
                   <a data-toggle="collapse" data-target="#collapse-<?php echo $value['id'] ?>" href="#collapse-<?php echo $value['id'] ?>" class="info-title collapsed" role="button" aria-expanded="false" aria-controls="collapse-<?php echo $value['id'] ?>">
                     <?php echo $value['title'] ?>
                   </a><!-- .info-title -->
                 </div><!-- .info-tab -->
               <?php endforeach; ?>

               <?php foreach($contents as $key => $value) : ?>
                 <div class="official-matters-content">
                   <div class="info-tab-content collapse" id="collapse-<?php echo $value['id']; ?>" data-parent="#accordion">
                     <div class="card card-body">
                       <?php echo $value['excerpt'] ?>
                     </div><!-- .card -->
                   </div><!-- .info-tab-content -->
                 </div><!-- .official-matters-content -->
               <?php endforeach; ?>
             </div>
           <?php endforeach ;?>
       </div>
         <?php wp_reset_postdata(); ?>

         <?php if (false) : ?>
         <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
               <div class="info-tab col-xl-3">
                 <div class="info-img">
                   <?php the_post_thumbnail(); ?>
                 </div><!-- .news_img -->
                 <a data-toggle="collapse" href="#collapse-<?php the_ID(); ?>" class="info-title" role="button" aria-expanded="false" aria-controls="collapse-<?php the_ID(); ?>">
                   <?php the_title(); ?>
                 </a><!-- .info-title -->
               </div><!-- .info-tab -->

               <div class="official-matters-content">
                 <div class="info-tab-content collapse" id="collapse-<?php the_ID(); ?>">
                   <div class="card card-body">
                       <?php the_excerpt(); ?>
                   </div><!-- .card -->
                 </div><!-- .info-tab-content -->
               </div><!-- .official-matters-content -->


         <?php
           endwhile;
           wp_reset_postdata();
         ?>
       <?php endif; ?>

       </div><!-- .official-matters-group -->
    </div><!-- .collapse-official-matters -->
0
Dariusz

Ouaip.

Ce que vous cherchez, c'est un "compteur" intelligent.

En réalité, votre problème est le suivant:

Vous essayez d'éviter les posts en double.

Voici la méthode populaire pour le faire.

Dans chaque fichier que vous exécutez une requête, vous devez ajouter ce code:

global $duplicated_posts;

$args = [
    'post_type' => 'post',
    'post__not_in' => $duplicated_posts
];

$query = new \WP_Query($args);

Notez le post__not_in. Maintenant, ce fichier sera exécuté une fois (supposons que dans un constructeur de page, peu importe) quand vous l'incluez, continuons.

"Ok mais le tableau est toujours vide".

Lorsque vous vérifiez si vous avez des publications, vous devez ajouter l'ID de chaque publication que vous avez trouvé dans ce tableau global, comme suit:

if( $query->have_posts() ) : ?>
    <div class="official-matters-group">
        <div class="official-matters-tabs">
        ..etc
        <?php
        while( $query->have_posts() ) :
            $query->the_post();
            $duplicated_posts[] = get_the_ID(); //golden ticket
            ..code for each post goes here.

Donc, maintenant, lorsque votre prochaine zone de contenu se penche sur ce $duplicated_posts, il saura qu'il ne faut pas inclure ces publications.

N'oubliez pas que vous devez copier ce modèle dans chaque fichier pour lequel vous ne souhaitez pas que des éléments soient répétés!

À votre santé.

0
coolpasta