Alle Beiträge anzeigen, die mit einem bestimmten Buchstaben beginnen?

11

Ich versuche, ein Wordpress-basiertes Wörterbuch zu erstellen. Im Grunde hat es 26 Seiten (eine für jeden Buchstaben):

ABC ... XYZ

Und auf jeder Seite werden alle Beiträge angezeigt, die mit einem bestimmten Buchstaben beginnen. Nach dem Öffnen der Seite "A" sollte also Folgendes angezeigt werden:

überrascht

Abakus

Abalone

(...) azurblau

Anfangs habe ich über benutzerdefinierte Beitragstypen nachgedacht, aber das Erstellen und Verwalten von 26 benutzerdefinierten Beitragstypen klingt nach einem Overkill.

Was ist die effizienteste Art, solche Beiträge zu sortieren? Datenbankabfrage, Aufteilungsschleife mit PHP? Ich strebe Tausende von Posts an (ja, es muss Wordpress sein :)).

Wordpressor
quelle

Antworten:

9

Verwenden Sie keine Beitragstypen, sondern Taxonomiebegriffe!

Legen Sie beim Speichern die Objektbegriffe in einer AZ-Taxonomie mit dem ersten Buchstaben des Beitragstitels fest. Stellen Sie sicher, dass Sie aus Gründen der Konsistenz Groß- oder Kleinschreibung erzwingen. Stellen Sie sicher, dass Sie Begriffe für jeden Buchstaben des Alphabets und einen Begriff für Zahlen und andere nicht alphanumerische Symbole erstellen.

Dies sollte schneller sein als das Abfragen des ersten Buchstabens jedes Beitragstitels und bietet Ihnen eine Taxonomie, mit der Sie mehr tun können, z. B. Tag Clouds oder Term Lister Widgets! Es ist auch eine viel schnellere Methode, um festzustellen, welchen Buchstaben wie viele Posts zugeordnet sind, ohne dass die Datenbank manuell gezählt werden muss, und Sie können sofort standardmäßige WordPress-Term-APIs verwenden, um komplexere Abfragen durchzuführen, z. B. Posts, die mit Vokalen beginnen

Tom J Nowell
quelle
Dies ist definitiv der ideale Weg. Denken Sie jedoch daran, mit Tausenden von Beiträgen; Dies könnte eine ziemlich umständliche Aufgabe sein. Sie müssten zunächst alle Beiträge abfragen , die mit jedem Buchstaben des Alphabets beginnen, und jeden Beitrag mit dem richtigen Taxonomiebegriff aktualisieren, der dem jeweiligen Buchstaben des Alphabets entspricht. Andernfalls würde die manuelle Aktualisierung jedes einzelnen Beitrags Jahrhunderte dauern .
Michael Ecklund
Ja, das ist ein RIESIGER Nachteil. Diese Beiträge werden von völlig unwissenden Leuten hinzugefügt, und ich kann mich nicht darauf verlassen, wenn es darum geht, die richtige Taxonomie beim Erstellen neuer Beiträge festzulegen . Ich bin mir nicht sicher, ob es effizient ist, alle Beiträge abzufragen und jedes Mal zu aktualisieren, wenn jemand etwas bearbeitet / erstellt.
Wordpressor
3
Nein, das wäre überhaupt kein Problem, verstecke die Benutzeroberfläche und automatisiere den Prozess. Mach es beim Speichern und Aktualisieren von Post-Hooks, es manuell zu machen wäre absurd teuer
Tom J Nowell
Tom J Nowell, es funktioniert wie ein Zauber, aber ich habe ein ernstes Problem und bin mir nicht sicher, wie ich damit umgehen soll - einige der Wörter beginnen mit Buchstaben wie en.wikipedia.org/wiki/Ą - ich bin Bedingungen für diese können nicht festgelegt werden. Hier ist ein Code und eine Erklärung: pastebin.com/cHxbjVFH , warum passiert das? Ich verwende ein WP-Paket für diese Sprache.
Wordpressor
Sprechen Sie über Akzente und Umlaute usw. usw.? Wenn ja, dann ist das etwas, das eine ganz neue Frage verdient und keine triviale Frage ist. Es ist wahrscheinlich, dass es sich auch um eine allgemeine PHP-Frage handelt, und daher ist Stack Overflow der beste Ort, um sie zu stellen
Tom J Nowell
4

Wenn Sie nicht mit der bevorzugten Taxonomie-Begriffsmethode arbeiten möchten, gehen Sie folgendermaßen vor:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // could be any letter you want
         $results = $wpdb->get_results(
                "
                SELECT * FROM $wpdb->posts
                WHERE post_title LIKE '$request%'
                AND post_type = 'post'
                AND post_status = 'publish'; 
                "
         ); 
         if ( $results ) 
         {
            foreach ( $results as $post ) 
            {
                setup_postdata ( $post ); 
                ?> 
                <li>
                    ... loop stuff here (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">No clubs found for that letter. Please try again, or use the search at the top.</div>
            <?php
         }
         ?>
    </ul>
21zna9
quelle
Können Sie erklären, wie das funktioniert? Würde es keinen Beitrag zurückgeben, der den Brief enthält?
Tintinabulator Zea
1

Überprüfen Sie diesen Artikel hier: query_post nach Titel?

Oder Sie können einen Pre-Save-Helfer mit dem PODS 2-Framework erstellen und den ersten Buchstaben des Post-Titels in einem Feld speichern und die einfache WHERE-Bedingung verwenden.

Oder erstellen Sie ein Dropdown-Menü (ein anderer Pod / Inhaltstyp) mit allen Buchstaben und erstellen Sie eine Beziehung zu Ihrem vorhandenen Beitragsinhaltstyp (in Pods 2 ist dies möglich). Bevor Sie den Wörterbuchbegriff speichern, wählen Sie aus dem Dropdown-Feld den Buchstaben aus, den Sie diesem Begriff zuweisen möchten.

In Pods 2 können Sie das zusätzliche Feld einem vorhandenen Beitragsinhaltstyp hinzufügen. Dieses Plugin / Framework, das so etwas wie CCK + Views in der Drupal-Welt ist, ist wirklich großartig.

Pods 2 ist ein sehr hilfreiches Plugin.

Derfder
quelle