Visualizzare tutti i post che iniziano con una determinata lettera?

5 ott 2012, 18:54:50
Visualizzazioni: 14.6K
Voti: 12

Sto cercando di costruire un dizionario basato su Wordpress, che avrà sostanzialmente 26 pagine (una per ogni lettera):

A B C ... X Y Z

Ogni pagina dovrà visualizzare tutti i post che iniziano con la lettera specificata, quindi aprendo la pagina "A" dovrebbe mostrare qualcosa come:

abaco

abbaglio

abbandono

(...) azzurro

Inizialmente ho pensato ai custom post type, ma creare e gestire 26 tipi di post personalizzati mi sembra eccessivo.

Qual è il modo più efficiente per ordinare i post in questo modo? Query al database, divisione del loop con PHP? Punterò ad avere migliaia di post (sì, deve essere per forza Wordpress :)).

0
Tutte le risposte alla domanda 3
8
10

Non utilizzare i tipi di post, utilizza i termini della tassonomia!

Al momento del salvataggio, imposta i termini dell'oggetto in una tassonomia A-Z, utilizzando la prima lettera del titolo del post. Assicurati di forzare maiuscole o minuscole per uniformità. Assicurati di creare termini per ogni lettera dell'alfabeto, e un termine per numeri e altri simboli non alfanumerici.

Questo dovrebbe essere più veloce che interrogare la prima lettera di ogni titolo del post, e ti dà una tassonomia con cui puoi fare più cose, come nuvole di tag, o widget di elenco termini! È anche un modo molto più veloce per determinare quali lettere hanno post associati e quanti, senza forzare il database a contare manualmente, e puoi utilizzare le API standard dei termini di WordPress già pronte per fare query più complesse, come post che iniziano con vocali

5 ott 2012 19:02:00
Commenti

Questa è sicuramente la strada ideale da prendere. Tuttavia, tieni presente che, con migliaia di articoli, potrebbe essere un compito piuttosto gravoso. Dovresti inizialmente interrogare tutti gli articoli che iniziano con ogni lettera dell'alfabeto e aggiornare ogni articolo con il termine di tassonomia corretto, corrispondente alla rispettiva lettera dell'alfabeto. Altrimenti, aggiornare manualmente ogni singolo articolo richiederebbe secoli per essere completato.

Michael Ecklund Michael Ecklund
5 ott 2012 21:20:48

Sì, questo è un ENORME svantaggio, questi articoli saranno aggiunti da persone TOTALMENTE ignoranti e non posso contare su di loro quando si tratta di impostare la tassonomia corretta durante la creazione di un nuovo articolo. Non sono sicuro se interrogare tutti gli articoli e aggiornarli ogni volta che qualcuno modifica/crea qualcosa sarà efficiente?

Wordpressor Wordpressor
5 ott 2012 21:46:58

No, non sarebbe affatto un problema, nascondi l'interfaccia utente e automatizza il processo.fallo sugli hook di salvataggio e aggiornamento degli articoli, farlo manualmente sarebbe assurdamente costoso

Tom J Nowell Tom J Nowell
5 ott 2012 22:05:11

Tom J Nowell, funziona perfettamente, ma ho un problema serio e non sono sicuro di come gestirlo - alcune parole inizieranno con lettere come http://en.wikipedia.org/wiki/Ą - non riesco a impostare i termini per queste. Ecco del codice e una spiegazione: http://pastebin.com/cHxbjVFH, perché succede questo? Sto usando il pacchetto WP dedicato a questa lingua.

Wordpressor Wordpressor
10 ott 2012 23:18:02

stai parlando di accenti, umlaut eccetera? Se è così, questo merita una domanda completamente nuova a parte, e non è una domanda banale da fare. È probabile che sia anche una domanda generale su PHP e quindi Stack Overflow sarebbe il posto migliore per chiederlo

Tom J Nowell Tom J Nowell
11 ott 2012 01:25:39

Grazie amico, ho capito, sembra che quando fai sbustr() questi segni si comportino come 2, non 1, caratteri :) Grazie!

Wordpressor Wordpressor
11 ott 2012 09:30:54

Ah, queste sono codifiche multibyte! Troverai le appropriate funzioni PHP per queste con il prefisso mb

Tom J Nowell Tom J Nowell
11 ott 2012 12:02:14

Ottima soluzione per la ricerca per lettera iniziale. Invece di esagerare includendo tutti i caratteri possibili, penso sia più elegante avere A-Z e # dove inserire tutto il resto.

brett brett
27 feb 2020 01:43:19
Mostra i restanti 3 commenti
2

Se non vuoi utilizzare il metodo preferito dei termini di Tassonomia, fai così:

<ul class="posts">
         <?php 
         global $wpdb; 
         $request = "a" // può essere qualsiasi lettera tu voglia
         $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>
                    ... contenuto del loop qui (the_title, the_permalink) ... 
                </li>
                <?php 
            }
         } 
         else 
         {
            ?> 
            <div class="alert">Nessun club trovato per quella lettera. Per favore riprova, o usa la ricerca in alto.</div>
            <?php
         }
         ?>
    </ul>
9 ott 2012 21:26:59
Commenti

puoi spiegare come funziona? non restituirebbe qualsiasi post che contiene la lettera?

Tintinabulator Zea Tintinabulator Zea
18 dic 2018 07:56:29

non lo farebbe. mysql utilizza % come carattere jolly. tuttavia non ho mai incontrato $ nelle query mysql. correttamente dovrebbe essere WHERE post_title LIKE 'request%'

brett brett
27 feb 2020 01:45:12
0

Consulta questo articolo qui: query_post per titolo?

Oppure puoi creare un helper pre-salvataggio utilizzando il framework PODS 2 e salvare la prima lettera del titolo del post in un campo specifico, utilizzando poi una semplice condizione WHERE.

Un'altra opzione è creare un dropdown (un altro pod/tipo di contenuto) con tutte le lettere e stabilire una relazione con il tuo tipo di contenuto esistente (in Pods 2 è possibile). Fatto ciò, prima di salvare il termine del dizionario, selezioni dal dropdown la lettera che vuoi assegnare a quel termine.

Con Pods 2 puoi aggiungere campi aggiuntivi a un tipo di contenuto esistente. Questo plugin/framework, che è simile a CCK + Views nel mondo Drupal, è davvero eccezionale.

Pods 2 è un plugin molto utile.

5 ott 2012 19:06:54