Afisare postări care încep cu o anumită literă?
Î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 :)).

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.

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ă.

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ă?

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, 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ă.

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

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!

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

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>

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

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.
