Wenn ich eine Schleife habe, die von einer Kategorieabfrage ausgeht, wie:
<?php $the_query = new WP_Query('cat=1&showposts=50&orderby=title&order=asc');?>
<ul>
<?php while ($the_query->have_posts()) : $the_query->the_post();?>
<li>.. </li><?php wp_reset_query(); ?>
<?php endwhile; ?>
</ul>
Wie würde ich eine if-Klausel erstellen, die die Liste in einem bestimmten Intervall unterbricht und eine neue startet? Geben Sie zum Beispiel beim 10. Beitrag a zurück </ul>
und beginnen Sie <ul>
um 11 Uhr einen neuen .
Dies ist falsch, aber um mein Ziel zu veranschaulichen:
<?php $count =0;
while($count <=50){
if ($count == 9){
echo "<li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li></ul>";
}
elseif ($count == 10){
echo "<ul><li><a href='<?php the_permalink(); ?>'>
<?php the_title(); ?></a></li>";
}
else {
echo "<li><a href='<?php the_permalink(); ?>'><?php the_title(); ?></a></li>";
}
Was ist der richtige Weg, um diese Logik in die Schleife aufzunehmen?
Antworten:
Erstellen Sie Spalten für Ihre Abfrage und einfache Anzeige
In Themen ist es wahrscheinlich nützlicher, etwas zu haben, das gut in Vorlagen-Tags und die Schleife passt. Meine erste Antwort konzentrierte sich nicht so sehr. Außerdem fand ich es etwas zu kompliziert für eine schnelle Adoption.
Ein einfacherer Ansatz, der mir in den Sinn kam, bestand darin, "die Schleife" mit Spalten zu erweitern und kam bisher zu dieser Lösung:
Ein WP_Query_Columns- Objekt "erweitert" jede Standard-WP-Abfrage um Spalten, die leicht durchlaufen werden können. Der erste Parameter ist die Abfragevariable und der zweite Parameter ist die Anzahl der Elemente, die pro Spalte angezeigt werden sollen:
Um es zu verwenden, fügen Sie einfach die WP_Query_Columns-Klasse aus dieser Liste zu Ihrer Themes function.php hinzu.
Erweiterte Verwendung
Wenn Sie die Spaltennummer benötigen, die Sie gerade anzeigen (z. B. für einige gerade / ungerade CSS-Klassen, können Sie diese auch von foreach abrufen:
Und die Gesamtzahl der Spalten ist ebenfalls verfügbar:
Zehnundzwanzig Beispiel
Ich könnte schnell zehnundzwanzig Themen für einen Test hacken und auf diese Weise Überschriften über jeder Schleife hinzufügen. Es ist in loop.php eingefügt, der Anfang ist der Code des Themas:
Für eine längere Antwort:
(So bin ich im Grunde zu den obigen Dingen gekommen, erkläre aber besser, wie man das Problem tatsächlich mit einfachen mathematischen Operationen löst. Meine neue Lösung besteht darin, über etwas Vorberechnetes zu iterieren.)
Es hängt ein wenig davon ab, wie viel Sie tatsächlich benötigen, um das Problem zu lösen.
Wenn beispielsweise die Anzahl der Elemente pro Spalte gleich eins ist, ist dies sehr einfach:
Selbst mit diesem einfachen Code kann man sehen, dass mehrere Entscheidungen getroffen werden müssen:
Die letzte Frage ist für die HTML-Ausgabe ziemlich interessant, da Sie wahrscheinlich nicht nur Elemente, sondern auch die Spalte mit HTML-Elementen einschließen möchten.
Glücklicherweise können wir mit Code all dies in Variablen festlegen und Code erstellen, der immer unseren Anforderungen entspricht.
Und manchmal können wir sogar nicht jede Frage von Anfang an beantworten. Zum Beispiel die Anzahl der Gesamtelemente: Gibt es einige, mehrere, eine genaue Anzahl, die mit einer ganzzahligen Anzahl von Spalten insgesamt übereinstimmt?
Selbst die Antwort von Jan Fabry funktioniert in einigen Fällen (wie in meinem obigen Beispiel für das Szenario mit einem Element pro Spalte). Möglicherweise interessieren Sie sich für etwas, das für eine beliebige Anzahl von von WP_Query zurückgegebenen Elementen funktioniert.
Zuerst für die Mathematik:
Dieser Code wird nicht ausgeführt. Lassen Sie uns dies in ein einfaches Textbeispiel umwandeln
Dies läuft tatsächlich und gibt bereits einige Ausgaben aus:
Dies simuliert bereits ziemlich gut, wie es in einer WordPress-Vorlage aussehen könnte :
(Ich habe das letzte Beispiel nicht in einer WP-Umgebung ausgeführt, aber es sollte zumindest syntaktisch korrekt sein.)
quelle
Dies ist eher eine allgemeine Programmierfrage, aber hier ist die Grundidee:
quelle
wp_reset_query();
ist nicht mit der Variablen $ the_query verbunden. Das wird überhaupt nicht benötigt, oder?$the_query->the_post()
Überschreibt die globale$post
Variable undwp_reset_query()
stellt sie wieder her (durch Aufrufenwp_reset_postdata()
- was könnte auch alleine ausreichen?).$wp_query
,$the_query
wurde aber im Beispiel verwendet. Ich habe mich jedoch geirrt und werde es der Vollständigkeit halber meiner zweiten Antwort hinzufügen.<ul></ul>
.Es ist nicht erforderlich, eine separate Variable zum Zählen zu erstellen, da die Abfragevariable diese bereits zählt bei :
$wp_query->current_post
. Außerdem müssen Sie den endgültigen Eintrag in der Liste berücksichtigen, damit<ul></ul>
Ihr Markup nicht leer ist .quelle
WP_Query
auch eine$post_count
Variable gibt, die Sie stattdessen verwenden könnencount($the_query->posts)
. Zac, du kannst meine Antwort "inakzeptieren" und eine andere akzeptieren, wenn sie dein Problem besser löst.Fügen Sie die
get_columns_array()
Funktion Ihrer function.php hinzu. Sie können dann einfach über Ihre Spalten iterieren:In Ihrem Thema führen Sie dann jede Schleife über die Spalten durch:
Ich habe die Standardgröße einer Spalte auf 10 festgelegt. Mit dem zweiten Parameter können Sie die Größe einer Spalte selbst festlegen. Wie zu 7 :
get_columns_array($post_count, 7);
.quelle
Hier ist ein weiterer Ansatz, den Sie verfolgen können:
quelle