Come posso creare permalink con lettere maiuscole?

8 dic 2010, 08:27:09
Visualizzazioni: 17.6K
Voti: 8

Come posso creare un link come questo?

http://www.lifecellskin.us/Dev/About

la parte "Using_Permalinks", la A è in maiuscolo. Ma WordPress converte automaticamente le maiuscole in minuscole.

Sto cercando di convertire un vecchio sito fatto solo in HTML in una piattaforma WordPress. Alcuni link del sito sono così:

http://www.lifecellskin.us/About

Il sito è già indicizzato per il SEO. Quindi non voglio perdere il ranking nei motori di ricerca.

Grazie per aver letto questo, e spero che qualcuno possa far luce sulla questione...

0
Tutte le risposte alla domanda 6
7

Gli URL delle pagine sono definiti dagli slug, e per impostazione predefinita vengono formattati e convertiti in minuscolo dalla funzione sanitize_title_with_dashes(). Tuttavia, questa funzione viene chiamata tramite un filtro, ed è possibile rimuovere l'hook del filtro in modo che non venga eseguita:

remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );

Fare solo questo probabilmente non è una buona idea, poiché non rimuoverà gli spazi e altri caratteri strani nello slug. Suggerisco di copiare la funzione esistente, rimuovere la parte che converte in minuscolo e riattivarla nuovamente:

add_filter( 'sanitize_title', 'wpse5029_sanitize_title_with_dashes' );
function wpse5029_sanitize_title_with_dashes($title) {
    $title = strip_tags($title);
    // Conserva gli ottetti escapati
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Rimuove i segni di percentuale che non fanno parte di un ottetto
    $title = str_replace('%', '', $title);
    // Ripristina gli ottetti
    $title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);

    $title = remove_accents($title);
    if (seems_utf8($title)) {
        //if (function_exists('mb_strtolower')) {
        //    $title = mb_strtolower($title, 'UTF-8');
        //}
        $title = utf8_uri_encode($title, 200);
    }

    //$title = strtolower($title);
    $title = preg_replace('/&.+?;/', '', $title); // rimuove le entità
    $title = str_replace('.', '-', $title);
    // Conserva anche i caratteri maiuscoli!
    $title = preg_replace('/[^%a-zA-Z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}
8 dic 2010 10:01:44
Commenti

solo una stupida domanda, perché anteponi wpse{qualsiasinumero} alle tue funzioni?

Horttcore Horttcore
8 dic 2010 10:20:05

@Horttcore: wpse5029 come la domanda #5029 su WP Stack Exchange?

Denis de Bernardy Denis de Bernardy
8 dic 2010 11:23:19

@Horttcore: Esatto, aggiungo il numero della domanda come prefisso a tutti i nomi delle funzioni. Per provarle io stesso come plugin separati, e nel caso qualcuno le copi nel proprio codice senza modificare: wpseNNNN è probabilmente univoco.

Jan Fabry Jan Fabry
8 dic 2010 14:51:45

Ah, questo ha senso per me :-)

Horttcore Horttcore
8 dic 2010 16:12:58

Fantastico! +1 per il prefisso intelligente.

kaiser kaiser
28 mar 2011 17:06:50

Grazie per l'informazione. Sto cercando di far sì che Wordpress rispetti le maiuscole incluse nel nome utente, ma non ci riesco.

Mario Torres Mario Torres
14 feb 2021 20:36:27

@MarioTorres non pubblicare risposte come soluzioni, l'ho convertita in un commento, ma non sono sicuro che questa fosse la risposta a cui stavi rispondendo. Se hai una nuova domanda, dovresti usare il pulsante "fai una domanda" in alto

Tom J Nowell Tom J Nowell
14 feb 2021 21:18:35
Mostra i restanti 2 commenti
0

Raccomando vivamente di mantenere gli URL in minuscolo per il tuo sito come fa WordPress (considero che gli URL in minuscolo siano una best practice in ogni caso) ma di configurare reindirizzamenti 301 per tutti gli URL per i quali hai questo problema. Ho notato che di solito si finisce per avere problemi quando si cerca di contrastare una piattaforma per impedirle di fare ciò che vuole fare, e le strutture degli URL sono davvero integrate nell'architettura di WordPress.

Ho scritto un'altra risposta molto simile alle tue esigenze e quell'esempio può mostrarti come utilizzare l'hook 'template_redirect' per impostare un reindirizzamento per quegli URL dove hai questo problema:

Se desideri ulteriori chiarimenti, chiedi pure.

8 dic 2010 10:54:10
0

Per quanto ne so, i motori di ricerca non sono sensibili alle maiuscole/minuscole, sebbene gli URL lo siano. Raccomanderei di eliminare il formato di file con le maiuscole, poiché è difficile da ricordare per gli utenti.

Se vuoi davvero mantenere la struttura precedente, dovrai lavorare con le espressioni regolari (regexp) nel file .htaccess.

8 dic 2010 09:15:14
0

FEBBRAIO 2020

Dalla risposta di Jan Fabry, la funzione WordPress è cambiata leggermente, quindi lo snippet corretto per la versione 5.6 è:

add_filter( 'sanitize_title', 'wpse5029_sanitize_title_with_dashes', 10, 3 );
function wpse5029_sanitize_title_with_dashes($title, $raw_title, $context = 'display') {

    $title = strip_tags( $raw_title );
    // Preserva gli ottetti escapati.
    $title = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title );
    // Rimuove i segni di percentuale che non fanno parte di un ottetto.
    $title = str_replace( '%', '', $title );
    // Ripristina gli ottetti.
    $title = preg_replace( '|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title );

    if ( seems_utf8( $title ) ) {
        $title = utf8_uri_encode( utf8_encode($title), 200 );
    }
    if ( 'save' === $context ) {
        // Converti &nbsp, &ndash e &mdash in trattini.
        $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );
        // Converti le entità HTML &nbsp, &ndash e &mdash in trattini.
        $title = str_replace( array( ' ', ' ', '–', '–', '—', '—' ), '-', $title );
        // Converti lo slash forward in trattino.
        $title = str_replace( '/', '-', $title );

        // Rimuovi completamente questi caratteri.
        $title = str_replace(
            array(
                // Soft hyphens.
                '%c2%ad',
                // &iexcl e &iquest.
                '%c2%a1',
                '%c2%bf',
                // Virgolette angolari.
                '%c2%ab',
                '%c2%bb',
                '%e2%80%b9',
                '%e2%80%ba',
                // Virgolette curve.
                '%e2%80%98',
                '%e2%80%99',
                '%e2%80%9c',
                '%e2%80%9d',
                '%e2%80%9a',
                '%e2%80%9b',
                '%e2%80%9e',
                '%e2%80%9f',
                // Punto elenco.
                '%e2%80%a2',
                // &copy, &reg, &deg, &hellip e &trade.
                '%c2%a9',
                '%c2%ae',
                '%c2%b0',
                '%e2%80%a6',
                '%e2%84%a2',
                // Accenti acuti.
                '%c2%b4',
                '%cb%8a',
                '%cc%81',
                '%cd%81',
                // Accento grave, macron, caron.
                '%cc%80',
                '%cc%84',
                '%cc%8c',
            ),
            '',
            $title
        );

        // Converti &times in 'x'.
        $title = str_replace( '%c3%97', 'x', $title );
    }
    // Elimina le entità.
    $title = preg_replace( '/&.+?;/', '', $title );
    $title = str_replace( '.', '-', $title );
    
    $title = preg_replace( '/[^%a-zA-Z0-9 _-]/', '', $title );
    $title = preg_replace( '/\s+/', '-', $title );
    $title = preg_replace( '|-+|', '-', $title );
    $title = trim( $title, '-' );
    
    return $title;
}

L'editor continuerà a mostrare l'URL in minuscolo, ma lo avrà salvato esattamente come inviato, senza modificare le maiuscole.

Nota: potrebbe non essere una buona idea utilizzare questo tipo di funzione, poiché il formato minuscolo è più conveniente.

2 feb 2021 18:04:58
0

Lo faccio direttamente sulla tabella mysql e funziona perfettamente: Modifica diretta della tabella MySQL

23 lug 2020 00:48:18
0

Puoi provare questo. Incolla il codice qui sotto nel file functions.php del tuo tema. Funziona perfettamente per me.

// Rimuovi il filtro esistente
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );

// Funzione per mantenere le maiuscole negli slug
function maintain_capitalization_slug($title, $raw_title, $context) {
// Applica solo durante il salvataggio degli slug
if ($context === 'save') {
    // Mantieni le maiuscole e sostituisci i caratteri speciali con trattini
    $title = preg_replace('/[^a-zA-Z0-9]+/', '-', $raw_title); // Sostituisci caratteri non alfanumerici con trattini
    $title = trim($title, '-'); // Rimuovi trattini all'inizio/fine
}
return $title;
}

// Applica la funzione personalizzata a 'sanitize_title'
add_filter('sanitize_title', 'maintain_capitalization_slug', 10, 3);
30 apr 2024 04:08:34