Wyświetlić wszystkie posty zaczynające się na podaną literę?

12

Próbuję zbudować słownik oparty na Wordpressie, w zasadzie będzie miał 26 stron (po jednej na każdą literę):

ABC ... XYZ

I każda strona wyświetli wszystkie posty zaczynające się od danej litery, więc po otwarciu strony „A” powinna ona wyświetlać coś takiego:

wstecz

liczydło

uchowiec

(...) lazur

Na początku myślałem o niestandardowych typach postów, ale tworzenie i utrzymywanie 26 niestandardowych typów postów brzmi jak przesada.

Jaki będzie najskuteczniejszy sposób sortowania takich postów? Zapytanie do bazy danych, podział pętli za pomocą PHP? Dążę do tysiąca postów (tak, to musi być Wordpress :)).

Wordpressor
źródło

Odpowiedzi:

10

Nie używaj typów postów, używaj terminów taksonomii!

Przy zapisywaniu ustaw warunki obiektu w taksonomii AZ, używając pierwszej litery tytułu postu. Pamiętaj, aby wymusić spójność wielkimi lub małymi literami. Pamiętaj, aby dla każdej litery alfabetu utworzyć terminy, a także liczby i inne symbole niealfanumeryczne.

Powinno to być szybsze niż sprawdzanie pierwszej litery każdego tytułu posta i daje taksonomię, dzięki której możesz zrobić więcej rzeczy, takich jak chmury tagów lub widżety list terminów! Jest to także znacznie szybszy sposób określania, które litery mają powiązane posty i ich liczbę, bez zmuszania bazy danych do ręcznego liczenia, a także możesz użyć standardowych interfejsów API terminów WordPress po wyjęciu z pudełka, aby wykonywać bardziej złożone zapytania, takie jak posty zaczynające się samogłosek.

Tom J Nowell
źródło
To zdecydowanie idealna trasa. Pamiętaj jednak o tysiącach postów; To może być dość kłopotliwe zadanie. Będziesz musiał najpierw przesłać zapytanie do wszystkich postów zaczynających się na każdą literę alfabetu i zaktualizować każdy post odpowiednim terminem taksonomii, pasującym do odpowiedniej litery alfabetu. W przeciwnym razie ręczne zaktualizowanie każdego pojedynczego posta zajęłoby wieki .
Michael Ecklund
Tak, to OGROMNY minus, posty te zostaną dodane przez CAŁKOWICIE ignorantów i nie mogę na nich liczyć, jeśli chodzi o ustawienie prawidłowej taksonomii podczas tworzenia nowego postu. Nie jestem pewien, czy sprawdzanie wszystkich postów i aktualizowanie ich za każdym razem, gdy ktoś edytuje / tworzy coś, będzie skuteczne?
Wordpressor,
3
Nie, to wcale nie będzie problem, ukryj interfejs użytkownika i zautomatyzuj proces. Zrób to w zapisywaniu i aktualizowaniu post hooków, ręczne wykonanie byłoby absurdalnie drogie
Tom J Nowell
Tom J Nowell, działa jak urok, ale mam jeden poważny problem i nie jestem pewien, jak sobie z tym poradzić - niektóre słowa zaczną się od liter takich jak en.wikipedia.org/wiki/Ą - jestem nie można ustalić dla nich warunków. Oto kod i wyjaśnienie: pastebin.com/cHxbjVFH , dlaczego tak się dzieje? Używam pakietu WP dedykowanego dla tego języka.
Wordpressor,
mówisz o akcentach i umlautach itp.? Jeśli tak, to jest to coś, co samo w sobie zasługuje na zupełnie nowe pytanie i nie jest trywialnym pytaniem. Prawdopodobnie jest to również ogólne pytanie dotyczące PHP, więc najlepiej byłoby zadać pytanie o Przepełnienie stosu
Tom J Nowell
4

Jeśli nie chcesz korzystać z preferowanej metody warunków taksonomii, wykonaj następujące czynności:

<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
źródło
czy możesz wyjaśnić, jak to działa? czy nie zwróci żadnego postu zawierającego list?
Tintinabulator Zea
nie byłoby. mysql używa% jako symbolu wieloznacznego. jednak nigdy nie spotkałem $ w zapytaniach mysql. poprawnie powinien przeczytaćWHERE post_title LIKE 'request%'
brett
1

Sprawdź ten artykuł tutaj: query_post według tytułu?

Lub możesz utworzyć pomocnika przed zapisaniem za pomocą frameworku PODS 2 i zapisać pierwszą literę tytułu postu w jakimś polu i użyć prostego GDZIE.

Lub stwórz listę rozwijaną (inny typ zasobu / zawartości) ze wszystkimi literami i stwórz związek z istniejącym typem treści postów (w strąkach 2 jest to możliwe) i to wszystko. Tak więc przed zapisaniem terminu ze słownika wybierasz z listy rozwijanej literę, którą chcesz przypisać do tego terminu.

W Pods 2 możesz dodać dodatkowe pole do istniejącego typu zawartości postów. Ta wtyczka / framework, który jest podobny do CCK + Views w świecie Drupal, jest naprawdę niesamowity.

Pods 2 to bardzo pomocna wtyczka.

Derfder
źródło