Ich möchte eine Archivseite mit Paginierung anzeigen, in der alle Kategorien auf meiner Website aufgelistet sind, und jeder Link führt zu dieser bestimmten Kategoriearchivseite. Dies wäre also wie eine Archivseite von Kategoriearchiven.
Für jede Kategorie auf meiner Website wird manuell eine benutzerdefinierte Miniaturansicht erstellt, die dem Permalink der Kategorie entspricht. Ich habe bereits ein Layout-Setup, um alle Kategorien anzuzeigen, aber ich mache dies mit einer benutzerdefinierten Seitenvorlage, sodass es keine Paginierung gibt. Dies bedeutet, dass alle Kategorien auf einer einzigen Seite angezeigt werden, was ein bisschen ärgerlich ist (ich habe mehr als 100 Kategorien).
Mein aktuelles Archiv ist mit einem bestimmten benutzerdefinierten Seitenvorlagennamen eingerichtet, page-catlist.php
aber ich bin bereit, diesen in einen anderen Typ von Vorlagendatei zu ändern.
Hier ist der aktuelle Code, mit dem ich alle Kategorien auf einer Seite ausgeben kann:
$args = array(
'orderby' => 'name',
'order' => 'ASC'
);
$cats = get_categories( $args );
$thm_pre = 'http://example.com/images/thumbs/';
$thm_end = '.png';
foreach($cats as $cat) {
$thumbnail = $thm_pre.$cat->slug.$thm_end;
// output the loop HTML here
// basically a list of category names & thumbs
// all linked to the cat URL by get_category_link()
}
Ich hoffe, es gibt einen besseren Weg, dies zu tun, damit ich eine natürliche Paginierung hinzufügen kann, idealerweise mit WP-PageNavi. Jede Hilfe wäre sehr dankbar!
quelle
Antworten:
Das Blättern in einer Liste von Begriffen / Kategorien / Tags ist recht einfach. Um dies zu erreichen, benötigen Sie nur minimale Informationen.
Schauen wir uns an, was wir brauchen
die Anzahl der Begriffe
die Anzahl der Begriffe pro Seite
get_terms()
( Beachten Sie nur, dass sich die Verwendung vonget_terms()
in Version 4.5 geändert hat .) Sie können auch verwenden,get_categories()
wenn Sie möchten,get_categories()
ist nur eine Wrapper-Funktion fürget_terms()
Also müssen wir zuerst die Anzahl der Begriffe zählen. Dazu verwenden wir den
count
Parameter inget_terms()
HINWEIS:
Der gesamte Code ist nicht getestet und erfordert mindestens
PHP 5.4
WordPress 4.5
Sie können dies einfach konvertieren, um mit älteren Versionen von PHP und WordPress zu arbeiten
Nachdem wir die Anzahl der Begriffe kennen, können wir die Anzahl der Begriffe festlegen, die wir pro Seite benötigen, sagen wir 10
Aus dem oben Gesagten können wir nun herausfinden, wie viele Seiten wir haben werden. Der Wert hier wird an die erforderliche Paginierungsfunktion übergeben, in Ihrem Fall an
wp_pagenavi()
In diesem Fall würden Sie
$max_num_pages
zu Ihrer Paginierungsfunktion übergehenDer nächste Teil wäre die Berechnung unseres Offsets. Wir möchten nur die relevante Anzahl von Begriffen pro Seite abrufen, um die Dinge zu optimieren. Wir benötigen nicht alle über 100 Begriffe pro Seite. Nur die benötigten 10 abzufragen ist viel schneller. Wir müssen also wissen, auf welcher Seite wir uns befinden. Daraus berechnen wir einen Versatz. Dies wird an übergeben
get_terms()
und gibt an,get_terms()
wie viele Begriffe vom ursprünglichen Startpunkt übersprungen werden sollen.Sobald wir das haben, müssen wir auch sagen
get_terms()
, dass wir nur 10 Begriffe zurückgeben sollen. Schauen wir uns den Code für dieses Stück anJe nach Paginierung haben Sie nur 10 Begriffe pro Seite. Sie können jetzt einfach Ihre Begriffe normal durchlaufen
Nur eine Anmerkung, Sie möchten sicherstellen, dass tatsächlich Begriffe von Ihrer
get_terms()
Funktion zurückgegeben werden.quelle
wp_pagnavi()
wird in diesem Fall wirklich funktionieren?next_posts_link()
,previous_posts_link()
undpaginate_links()
. Es würde auch mit jeder Paging-Funktion funktionieren, bei der Sie einen ganzzahligen Wert an die Funktion übergeben können, wie z. B. meine Paging-Funktion hier . Soweit fürwp_pagenavi()
, kann ich nicht sagen , ja oder nein , wie ich wirklich keine Ahnung, wie man diese Funktion funktioniert, müssen Sie es testen. In meinem Code oben,$max_num_pages
enthält die Anzahl der Seiten, es ist ein ganzzahliger Wert, es ist diese Variable, die Sie an Funktionen übergeben müssen, um die Paginierung zu berechnenIch bin mit WP-PageNavi nicht vertraut, aber ich vermute, dass davon ausgegangen wird, dass es sich um Posts handelt, sodass es leicht zu Problemen kommen kann, wenn Sie es in einer Schleife wie Ihrer verwenden. Vielleicht ist das CSS immer noch hilfreich beim Stylen Ihres HTML-Codes. Wie auch immer, es ist nicht so schwierig, eine eigene Paginierung einzurichten.
Zunächst müssen Sie wissen, wie viele Kategorien es gibt:
Als nächstes müssen Sie bestimmen, wie viele Elemente pro Seite Sie möchten:
Dadurch erhalten Sie die Anzahl der Seiten:
Die dritte Information, die Sie benötigen, ist die Seite, auf der Sie sich befinden. Sie können dies verfolgen, indem Sie eine
query_var
URL eingeben. Ihre URL sieht dann ungefähr so aus:www.example.com/yourcatpage?catpage=2
Bevor Sie die Schleife starten, müssen Sie wissen, welche Seite aufgerufen wird:
Hier können Sie das erste Element aufrufen, das Sie anzeigen möchten:
und der Letzte:
Die letzte Seite enthält möglicherweise weniger als
$cats_per_page
Kategorien. Daher benötigen Sie zusätzlich:Durchlaufen Sie nun die gewünschten Elemente von
$cats
:Nach der Schleife können Sie die Variablen verwenden, um vorherige / nächste Tags oder eine andere Art der Navigation zu generieren.
Beachten Sie, dass ich diesen Code nicht getestet habe. Ich habe möglicherweise einige Fehler gemacht, als ich berücksichtigt habe, dass das erste Element in einem Array den Schlüssel 0 hat.
quelle