Ich habe zwei benutzerdefinierte Beitragstypen, die sich mit den Namen von Personen befassen. Im Moment werden beim Durchsuchen von Ansichten nur alle alphabetisch aufgelistet, und die Paginierung unterteilt sie nach Zahlen. Dies ist nicht besonders hilfreich, wenn Sie versuchen, eine bestimmte Person zu finden.
Insbesondere wurde ich gebeten, Paginierungslinks für Personen zu erstellen, die so aussehen:
- AG
- HM
- NQ
- RQ
Mein Problem - Ich kann nicht herausfinden, wie ich die benutzerdefinierten Beitragstypen anhand des Anfangsbuchstabens eines Felds abfragen kann. Dann bin ich mir nicht sicher, wie ich die Paginierung auf diese Weise erstellen kann. Hat jemand irgendwelche Vorschläge? Vielen Dank!
custom-post-types
pagination
mcleodm3
quelle
quelle
Antworten:
Interessante Frage! Ich habe es gelöst, indem ich die
WHERE
Abfrage um eine Reihe vonpost_title LIKE 'A%' OR post_title LIKE 'B%' ...
Klauseln erweitert habe. Sie können auch einen regulären Ausdruck verwenden, um eine Bereichssuche durchzuführen, aber ich glaube, dass die Datenbank dann keinen Index verwenden kann.Dies ist der Kern der Lösung: ein Filter für die
WHERE
Klausel:Natürlich möchten Sie keine zufälligen externen Eingaben in Ihre Abfrage zulassen. Aus diesem Grund habe ich einen Schritt zur Bereinigung der Eingabe
pre_get_posts
, der zwei Abfragevariablen in einen gültigen Bereich konvertiert. (Wenn Sie einen Weg finden, dies zu brechen, hinterlassen Sie bitte einen Kommentar, damit ich ihn korrigieren kann.)Der letzte Schritt besteht darin, eine hübsche Umschreiberegel zu erstellen, damit Sie zu allen Posts gehen
example.com/posts/a-g/
oderexample.com/posts/a
sie sehen können, die mit diesem (Bereich von) Buchstaben beginnen.Sie können das Muster für das Umschreiben von Regeln ändern, um mit etwas anderem zu beginnen. Wenn dies für einen benutzerdefinierten Beitragstyp gilt, müssen Sie
&post_type=your_custom_post_type
die Ersetzung hinzufügen (die zweite Zeichenfolge, die mit beginntindex.php
).Das Hinzufügen von Paginierungslinks bleibt dem Leser als Übung :-)
quelle
like_escape()
:)Dies wird Ihnen den Einstieg erleichtern. Ich weiß nicht, wie Sie die Abfrage bei einem bestimmten Buchstaben unterbrechen und dann WP mitteilen würden, dass es eine andere Seite mit mehr Buchstaben gibt, aber das Folgende übernimmt 99% des Restes.
Vergessen Sie nicht, Ihre Lösung zu veröffentlichen!
quelle
Eine Antwort am Beispiel von @ kaiser mit einem benutzerdefinierten Beitragstyp als Funktion, die Alpha-Start- und Endparameter akzeptiert. Dieses Beispiel ist offensichtlich für eine kurze Liste von Elementen gedacht, da es kein sekundäres Paging enthält. Ich poste es, damit Sie das Konzept in Ihr Konzept integrieren können,
functions.php
wenn Sie möchten.quelle
Hier ist eine Möglichkeit, dies mithilfe der Filter
query_vars
und zu tunposts_where
:Quelle: https://gist.github.com/3904986
quelle
Dies ist weniger eine Antwort als vielmehr ein Hinweis auf eine Richtung, die eingeschlagen werden muss. Dies muss wahrscheinlich zu 100% benutzerdefiniert sein - und wird sehr involviert sein. Sie müssen eine benutzerdefinierte SQL-Abfrage erstellen (mithilfe der wpdb-Klassen) und diese Parameter dann zur Paginierung an Ihre benutzerdefinierte Abfrage übergeben. Wahrscheinlich müssen Sie auch dafür neue Umschreiberegeln erstellen. Einige zu untersuchende Funktionen:
quelle