Afisare postări care încep cu o anumită literă?

5 oct. 2012, 18:54:50
Vizualizări: 14.6K
Voturi: 12

Încerc să construiesc un dicționar bazat pe WordPress, care va avea 26 de pagini (câte una pentru fiecare literă):

A B C ... X Y Z

Și fiecare pagină va afișa toate postările care încep cu litera respectivă, deci după deschiderea paginii "A" ar trebui să afișeze ceva de genul:

aback

abacus

abalone

(...) azure

M-am gândit inițial la tipuri personalizate de postări, dar crearea și întreținerea a 26 de tipuri personalizate de postări pare exagerat.

Care ar fi cel mai eficient mod de a sorta postările în acest fel? Interogare în baza de date, împărțirea loop-ului cu PHP? Vreau să gestionez mii de postări (da, trebuie să fie WordPress :)).

0
Toate răspunsurile la întrebare 3
8
10

Nu folosiți tipuri de postări, folosiți termeni de taxonomie!

La salvare, setați termenii obiectului într-o taxonomie A-Z, folosind prima literă din titlul postării. Asigurați-vă că forțați litere mari sau mici pentru consistență. Asigurați-vă că creați termeni pentru fiecare literă a alfabetului și un termen pentru cifre și alte simboluri nealfanumerice.

Această abordare ar trebui să fie mai rapidă decât interogarea primei litere din fiecare titlu de postare și vă oferă o taxonomie cu care puteți face mai multe lucruri, cum ar fi nori de etichete sau widget-uri de listare a termenilor! De asemenea, este un mod mult mai rapid de a determina care litere au postări asociate și câte, fără a forța baza de date să numere manual și puteți utiliza API-urile standard de termeni WordPress pentru a face interogări mai complexe, cum ar fi postările care încep cu vocale.

5 oct. 2012 19:02:00
Comentarii

Acesta este cu siguranță drumul ideal de urmat. Totuși, rețineți că, cu mii de articole; aceasta ar putea fi o sarcină destul de greoaie. Va trebui inițial să interogați toate articolele începând cu fiecare literă a alfabetului și să actualizați fiecare articol cu termenul de taxonomie corespunzător, potrivit literei respective din alfabet. În caz contrar, actualizarea manuală a fiecărui articol individual va dura secole pentru a fi finalizată.

Michael Ecklund Michael Ecklund
5 oct. 2012 21:20:48

Da, acesta este un DEZAVANTAJ ENORM, aceste articole vor fi adăugate de persoane COMPLET ignorante și nu pot conta pe ele când vine vorba de setarea corectă a taxonomiei în timpul creării unui articol nou. Nu sunt sigur dacă interogarea tuturor articolelor și actualizarea lor de fiecare dată când cineva editează/crează ceva va fi eficientă?

Wordpressor Wordpressor
5 oct. 2012 21:46:58

Nu, asta nu ar fi o problemă deloc, ascundeți interfața și automatizați procesul. Faceți-o pe hook-urile de salvare și actualizare a articolului, a o face manual ar fi absurd de costisitor

Tom J Nowell Tom J Nowell
5 oct. 2012 22:05:11

Tom J Nowell, funcționează perfect, dar am o problemă serioasă și nu sunt sigur cum să o rezolv - unele cuvinte încep cu litere precum http://en.wikipedia.org/wiki/Ą - nu pot seta termeni pentru acestea. Iată niște cod și explicație: http://pastebin.com/cHxbjVFH, de ce se întâmplă asta? Folosesc pachetul WP dedicat pentru această limbă.

Wordpressor Wordpressor
10 oct. 2012 23:18:02

vorbești despre accente și umlaute etc.? Dacă da, atunci aceasta este o problemă care merită o întrebare nouă și separată, iar răspunsul nu este trivial. Este probabil și o întrebare generală despre PHP, așa că Stack Overflow ar fi cel mai bun loc pentru a o adresa

Tom J Nowell Tom J Nowell
11 oct. 2012 01:25:39

Mulțumesc, am rezolvat, se pare că atunci când folosești sbustr() aceste semne se comportă ca 2, nu ca 1 semn :) Mulțumesc!

Wordpressor Wordpressor
11 oct. 2012 09:30:54

Ah, acestea sunt codări multibyte! Vei găsi funcții PHP adecvate pentru acestea prefixate cu mb

Tom J Nowell Tom J Nowell
11 oct. 2012 12:02:14

Soluție excelentă pentru căutare după litera de început. În loc să exagerezi având toate caracterele posibile, cred că este mai elegant să ai A-Z și # unde se potrivesc toate celelalte.

brett brett
27 feb. 2020 01:43:19
Arată celelalte 3 comentarii
2

Dacă nu dori să folosești metoda preferată cu termenii de Taxonomie, fă asta:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // poate fi orice literă dorești
         $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>
                    ... conținutul buclei aici (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">Nu s-au găsit cluburi pentru această literă. Te rugăm să încerci din nou sau folosește căutarea din partea de sus.</div>
            <?php
         }
         ?>
    </ul>
9 oct. 2012 21:26:59
Comentarii

poți explica cum funcționează asta? nu ar returna orice postare care conține litera?

Tintinabulator Zea Tintinabulator Zea
18 dec. 2018 07:56:29

nu ar face asta. mysql folosește % ca wildcard. totuși nu am întâlnit niciodată $ în interogările mysql. corect ar trebui să fie WHERE post_title LIKE 'request%'

brett brett
27 feb. 2020 01:45:12
0

Verifică acest articol aici: query_post după titlu?

Sau poți crea un ajutor pre-salvare folosind framework-ul PODS 2 și salvează prima literă a titlului postării într-un câmp separat, apoi folosește o condiție WHERE simplă.

Sau creează un meniu derulant (alt pod/tip de conținut) cu toate literele și stabilește o relație cu tipul de conținut existent al postărilor tale (în pods 2 acest lucru este posibil) și asta e tot. Deci, înainte de a salva termenul din dicționar, selectezi din meniul derulant litera pe care dorești să o atribui acestui termen.

În Pods 2 poți adăuga un câmp suplimentar la un tip de conținut existent al postărilor. Acest plugin/framework, care seamănă cu CCK + Views din lumea Drupal, este cu adevărat minunat.

Pods 2 este un plugin foarte util.

5 oct. 2012 19:06:54