Esiste una lunghezza massima per lo slug in WordPress?

23 mag 2012, 18:34:49
Visualizzazioni: 17.2K
Voti: 14

Un cliente ha appena creato un post con uno slug molto lungo (90 caratteri), senza caratteri speciali (tranne i trattini) ecc.

Ogni volta che si cliccava sul link a quel post, inclusi i link "Anteprima" o "Visualizza questo Post" dal backend di amministrazione, veniva generato un errore 404.

Dopo aver accorciato manualmente lo slug, tutto ha funzionato come previsto. Questa è una "funzionalità" o un "bug"?

EDIT: una nota per tutti quelli che parlano di limiti del database.

Se avessi raggiunto il limite del campo del database, lo slug stesso sarebbe stato troncato. Pensateci un attimo. Nella maggior parte delle installazioni WP, wp_posts.post_name è VARCHAR(200). Quindi, supponiamo che qualcuno inserisca un titolo con > 200 caratteri. Cosa succede? Lo slug viene troncato a 200 caratteri e memorizzato in wp_posts.post_name. Non è che qualcuno va a digitare il titolo completo del post nella barra degli indirizzi del browser, sostituendo gli spazi con trattini, giusto? L'URL viene generato da WordPress, che prende l'URL dalla tabella wp_posts.post_name e lo inserisce nell'attributo href del tag anchor. Quindi non ci sarà disparità. Tutto il discorso sul database è una falsa pista.

In ogni caso, lo slug in questione è di soli 90 caratteri, quindi non ha nulla a che fare con i limiti del database.

Ci sono limitazioni note riguardo al rewrite?

1
Commenti

Puoi utilizzare uno strumento gratuito come MySQL workbench per verificare il tipo di dati (e la lunghezza massima se presente) di qualsiasi campo di WordPress come definito nella corrispondente tabella/colonna di WordPress

Jordi Cabot Jordi Cabot
23 mag 2012 19:13:11
Tutte le risposte alla domanda 3
2
11

A causa della struttura della tabella wp_posts, la lunghezza della colonna post_name (la colonna per gli slug) è pari a 200 caratteri.

23 mag 2012 18:48:16
Commenti

@TomAuger & Eugene - potete confermare il problema, perché Tom dice che lo slug aveva 90 caratteri. So che il limite è 200, ma questo non include l'URL della home, giusto?

brasofilo brasofilo
23 mag 2012 19:39:40

@Eugene, esatto. 200 caratteri. Il mio slug aveva esattamente 90 caratteri, quindi non stiamo raggiungendo il limite del database.

Tom Auger Tom Auger
23 mag 2012 23:13:21
1

Suppongo che di per sé non abbia un limite, ma la proprietà del campo nel database per gli slug potrebbe essere impostata con una lunghezza massima.

Quindi controlla il Database!

23 mag 2012 18:50:54
Commenti

@Chi ha votato negativamente: La risposta è corretta. Quindi ho ripristinato il voto positivo.

kaiser kaiser
23 mag 2012 22:32:13
6

Probabilmente il problema non era nemmeno direttamente legato a WordPress o al database...

Ma la lunghezza dell'URL superava i 255 caratteri (e non tutti i browser web apprezzano questa cosa).

Quello che potrebbe essere successo qui è stato un URL più lungo di 255 caratteri, che è stato troncato dalla barra degli indirizzi del browser durante l'apertura... causando il recupero di un permalink errato... che ha restituito un errore 404.

Quindi presumibilmente la lunghezza massima dello slug potrebbe essere:

255 - la lunghezza di (Protocollo + FQDN + struttura del permalink)...

  • basandosi su un limite rigido del browser.

Ma non può essere più lungo di 200 caratteri...

  • basandosi sulla dimensione del campo post_name.

Anche se qualcos'altro potrebbe aver causato il 404 in questo caso specifico.

Avrebbe potuto essere anche un carattere che non è stato codificato correttamente con url_encode, le ragioni per i 404 sono praticamente infinite... avete mai considerato un cluster danneggiato su HDD o un modulo RAM difettoso? :)

30 mag 2012 07:28:42
Commenti

Il GUID non è l'URL. Sembra un URL, ma non viene utilizzato per leggere una richiesta. Se sposti WordPress da un dominio a un altro, il GUID non verrà modificato. Vedi http://core.trac.wordpress.org/ticket/6492 e http://core.trac.wordpress.org/ticket/10857.

fuxia fuxia
30 mag 2012 07:41:59

Ehm, per quale altro scopo se non l'identificazione dovrebbe essere utilizzato un ID univoco? Voglio dire, la domanda fondamentale è: qual è il motivo per cui in questo caso viene restituito un errore 404?

Martin Zeitler Martin Zeitler
30 mag 2012 08:32:37

L'errore 404 e il GUID non sono correlati, credo. WordPress semplicemente non utilizza il GUID quando cerca un post che corrisponde a un URL.

fuxia fuxia
30 mag 2012 08:46:30

Penso che tu abbia ragione... post_name e GUID possono essere esclusi come fonte del problema - ciò che resta sono i permalink e i re-write. Senza i logfile di Apache o altro, questa è solo un'ipotesi ;)

Martin Zeitler Martin Zeitler
30 mag 2012 08:58:46

@syslogic Penso che i rewrite siano probabilmente la causa e meritino ulteriori indagini. L'URL, incluso la parte http://, era ancora sotto i 128 caratteri, quindi non credo che stia raggiungendo un limite rigido del browser sulla lunghezza dell'URL.

Tom Auger Tom Auger
31 mag 2012 16:59:28

@TomAuger se è così breve, la mia conclusione potrebbe non applicarsi - volevo solo segnalare anche quella possibilità. Apparentemente questa domanda non può essere risolta senza accesso FTP/mySQL.

Martin Zeitler Martin Zeitler
31 mag 2012 18:20:27
Mostra i restanti 1 commenti