Fügen Sie statische Blöcke in eine PHP-Schleife ein

Lesezeit: 6 Minuten

Benutzer-Avatar
agr103

Ich versuche, 2 statische Divs in eine PHP-Schleife einzufügeninsbesondere eine ganz am Anfang der Schleife und eine ganz am Ende.

Diese 2 Divs müssen innerhalb ihrer entsprechenden erscheinen .row Elternteil, der derzeit alle 3 DIVs umschließt. Wie kann ich das machen?

BEARBEITEN
Hier ist ein Bild, um zu beschreiben, was ich brauche. Die rosa Blöcke sind die manuell eingefügten Divs, die einen anderen Inhalt haben als die blauen Divs. Diese blauen Divs sind nur WP-Posts:

Geben Sie hier die Bildbeschreibung ein

Hier ist mein PHP, derzeit erstellt dies 4 Spalten in der ersten und letzten Zeile, wo es nur 3 Spalten sein sollten:

<?php static $c=1;
      $subs = new WP_Query( array( 'post_parent' => 14, 'post_type' => 'page' ));
      if( $subs->have_posts() ) : while( $subs->have_posts() ) : $subs->the_post(); ?>

           <?php if (($c % 3) === 1) {
             // This creates part of the wrapper .row div
             echo "<div class="row">";
           } ?>

           <?php 
           if ($c == 1) {?>
             <div class="col_4 card bar">
              first card that is manually inserted with different content
             </div>
           <?php } ?>

              <a href="https://stackoverflow.com/questions/30799598/<?php the_permalink(); ?>" class="col_4 card bar no-pad <?php if($c % 3 == 0) { echo 'last'; } ?>">
                 <?php if ( has_post_thumbnail() ) {?>
                 <div class="feature-image c-1">
                       <?php the_post_thumbnail('medium'); ?>
                 </div>
                 <?php } ?>
                 <div class="excerpt-wrap">
                    This is a post from within WordPress
                 </div>
              </a>

           <?php if ($c == 6) {?>
                <div class="col_4 card bar">
                 Last card that is manually inserted with different content
                </div>
           <?php } ?>

           <?php if (($c % 4) === 3) {
             echo "</div>";
           }?>
     <?php $c++; endwhile; endif; wp_reset_postdata(); ?>

BEARBEITEN
Dies ist die HTML-Struktur, die ich erreichen möchte:

<!-- very first row -->
<div class="row">
  <!-- This is a static block followed by the very first two worpdress posts-->
  <div class="static-block"></div>

  <a href="#" class="wp-post"></a>
  <a href="#" class="wp-post"></a>
</div>

<!-- I could have 3 or 30 wordpress posts repeating this format -->
<div class="row">
  <a href="#" class="wp-post"></a>
  <a href="#" class="wp-post"></a>
  <a href="#" class="wp-post"></a>
</div>

<!-- very last row -->
<div class="row">
  <!-- These are the very two worpdress posts followed by a static block -->
  <a href="#" class="wp-post"></a>
  <a href="#" class="wp-post"></a>

  <div class="static-block"></div>
</div>

  • Es ist nicht ganz klar, was du vorhast. stackoverflow.com/help/mcve

    – ksbg

    12. Juni 2015 um 9:27 Uhr

  • @treegarden Ich habe ein Bild hinzugefügt, um die Dinge hoffentlich klarer zu machen

    – agr103

    12. Juni 2015 um 9:39 Uhr

  • Und was funktioniert in deinem Code nicht?

    – ksbg

    12. Juni 2015 um 9:45 Uhr

  • @treegarden Ich habe dies auch zu den Fragen hinzugefügt, in denen ich mein PHP vorgestellt habe. Aktuell werden 4 Reihen statt nur 3 hinzugefügt

    – agr103

    12. Juni 2015 um 9:46 Uhr


  • @treegarden Ich habe auch die HTML-Struktur hochgeladen, die ich erreichen möchte

    – agr103

    12. Juni 2015 um 9:57 Uhr

Benutzer-Avatar
Ravi Patel

<?php
    $c = 1;
    $subs = new WP_Query(array('post_parent' => 14, 'post_type' => 'page'));
    if ($subs->have_posts()) :
    ?>
        <div class="row">
            <?php 
                while ($subs->have_posts()) : $subs->the_post();
                if (($c % 3) == 0 || $c == 3):
            ?>
        </div><div class="row">
        <?php
                endif;
        ?>
        <?php
            if ($c == 1):
        ?>
            <div class="col_4 card bar">
            first card that is manually inserted with different content
            </div>
        <?php endif; ?>

        <a href="https://stackoverflow.com/questions/30799598/<?php the_permalink(); ?>" class="col_4 card bar no-pad <?php if ($c % 3 == 0) { echo 'last'; } ?>">
        <?php if (has_post_thumbnail()) { ?>
            <div class="feature-image c-1">
                <?php the_post_thumbnail('medium'); ?>
            </div>
        <?php } ?>
            <div class="excerpt-wrap">
                This is a post from within WordPress
            </div>
        </a>

        <?php if ($c == 7) { ?>
            <div class="col_4 card bar">
                Last card that is manually inserted with different content
            </div>
        <?php } ?>


    <?php 
        $c++;
        endwhile; 
    ?>
    </div>                        
<?php
    endif;
    wp_reset_postdata(); 
?>

Wenn Sie mehr als 7 Seiten haben und zuletzt einen statischen Block hinzufügen möchten, ändern Sie einfach 7 in den Post-Count-Wert ($c == $sub->post_count)

Geben Sie hier die Bildbeschreibung ein

  • Das funktioniert hervorragend. Genau das, was ich wollte! Danke Ravi!

    – agr103

    12. Juni 2015 um 12:30 Uhr

  • Kurze Frage: Wie kann ich mit Ihrem Code einen globalen Zähler für ALLE Blöcke setzen?

    – agr103

    12. Juni 2015 um 12:53 Uhr

BEARBEITEN: Entschuldigung, es scheint, dass ich Ihren Beitrag gesehen habe, bevor Sie die Bilder des Drahtmodells hochgeladen haben.

Es ist mir nicht so klar, das Ziel Ihres Codes. Aber was ich verstehe ist, dass Sie eine Struktur wie diese generieren müssen:

<div class="row">
  <div class="static">
  </div>
  <div class="static">
  </div>

  #here the loop will create
  <div></div>
  <div></div>
  <div></div>

  <div class="static">
  </div>
  <div class="static">
  </div>
</div>

und dies wird für so viele dupliziert ich in deiner während Sie haben.

Wenn Sie das brauchen, müssen Sie meiner Meinung nach mit Ihrer $c-Variablen 1,2,3 zählen. Jedes Mal, wenn Sie in $c = 1 sind, drucken Sie die ersten 2 statischen Divs, und wenn Sie in $c = 3 sind, drucken Sie die letzten 2 statischen Divs. Setzen Sie $c auf 1 zurück, wenn Sie $c = 3 erreichen, und fügen Sie eine bedingte Frage ein, ob es das letzte Element und sein $c != 3 ist, damit Sie die letzten 2 statischen Divs ausgeben.

  • Nachdem Sie das Bild gesehen haben, das Sie gerade hochgeladen haben, bleibt die Lösung, die ich geben würde, dieselbe, nur 4 statt 3 zählen und 1 div am Anfang und am Ende hinzufügen. Hoffe, es ist das, was Sie brauchten.

    – Cynthia Sánchez

    12. Juni 2015 um 9:46 Uhr


  • Danke für die Antwort. Siehe meine aktualisierte Frage mit idealer HTML-Struktur

    – agr103

    12. Juni 2015 um 9:55 Uhr

  • In diesem Fall müssen Sie die Länge des Arrays nehmen. Rest 2 (für die erste Zeile) und den Rest durch 3 teilen. Das Ergebnis ist die Menge an Raws, die Sie in der Mitte haben (wo keine statischen Divs gedruckt werden). out).. und der Rest von dieser Division sind die verbleibenden 1 oder 2 Divs (die Sie mit ceil(i*3) aufrunden) und Sie werden für die letzte Reihe haben, zu der Sie zählen müssen und wann Wenn Sie sich in dieser Position befinden, wissen Sie, dass Sie das letzte statische Div ausdrucken müssen. Sie müssen sich überlegen, was passiert, wenn die Anzahl der Elemente 32 beträgt. Was passiert mit dem letzten statischen Element?

    – Cynthia Sánchez

    12. Juni 2015 um 10:47 Uhr

  • Könnten Sie einen Beispielcode bereitstellen? Ich bin mir nicht ganz sicher, ob ich verstehe, was du meinst.

    – agr103

    12. Juni 2015 um 11:06 Uhr

1256650cookie-checkFügen Sie statische Blöcke in eine PHP-Schleife ein

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy