Cum pot crea permalink-uri cu litere mari (upper-case)? | Ghid WordPress

8 dec. 2010, 08:27:09
Vizualizări: 17.6K
Voturi: 8

Cum pot crea un link de genul acesta?

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

partea "Using_Permalinks", unde A este cu literă mare. Dar WordPress convertește automat literele mari în litere mici.

Încerc să migrez un site vechi făcut doar în HTML pe platforma WordPress. Unele link-uri către site arată astfel:

http://www.lifecellskin.us/About

Site-ul este deja indexat de SEO. Așa că nu vreau să pierd poziția în motoarele de căutare.

Mulțumesc pentru citire și sper că cineva va putea să-mi explice soluția...

0
Toate răspunsurile la întrebare 6
7

URL-urile paginilor sunt definite prin slug-uri, iar în mod implicit acestea sunt formatate și convertite în litere mici de către funcția sanitize_title_with_dashes(). Cu toate acestea, această funcție este apelată printr-un filtru, și poți deconecta filtrul astfel încât să nu mai fie apelat:

remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );

Doar să faci asta nu este probabil o idee bună, deoarece nu va elimina spațiile și alte caractere neobișnuite din slug. Sugerez să copiezi funcția existentă, să elimini partea care convertește în litere mici și să o conectezi din nou:

add_filter( 'sanitize_title', 'wpse5029_sanitize_title_with_dashes' );
function wpse5029_sanitize_title_with_dashes($title) {
    $title = strip_tags($title);
    // Păstrează octeții escapați.
    $title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
    // Elimină semnele procent care nu fac parte dintr-un octet.
    $title = str_replace('%', '', $title);
    // Restabilește octeții.
    $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); // elimină entitățile
    $title = str_replace('.', '-', $title);
    // Păstrează și caracterele majuscule!
    $title = preg_replace('/[^%a-zA-Z0-9 _-]/', '', $title);
    $title = preg_replace('/\s+/', '-', $title);
    $title = preg_replace('|-+|', '-', $title);
    $title = trim($title, '-');

    return $title;
}
8 dec. 2010 10:01:44
Comentarii

doar o întrebare stupidă, de ce prefixezi wpse{oricenumar} la funcțiile tale?

Horttcore Horttcore
8 dec. 2010 10:20:05

@Horttcore: wpse5029 ca WP Stack Exchange întrebarea #5029?

Denis de Bernardy Denis de Bernardy
8 dec. 2010 11:23:19

@Horttcore: Exact, prefixez toate numele funcțiilor cu numărul întrebării. Pentru a le testa eu însumi ca pluginuri separate, și în cazul în care cineva le copiază în propriul cod fără a le schimba: wpseNNNN este probabil unic.

Jan Fabry Jan Fabry
8 dec. 2010 14:51:45

Ah, are sens pentru mine :-)

Horttcore Horttcore
8 dec. 2010 16:12:58

Este grozav! +1 pentru prefixul inteligent.

kaiser kaiser
28 mar. 2011 17:06:50

Mulțumesc pentru informație. Încerc să fac ca Wordpress să respecte capitalizarea inclusă în numele de utilizator, dar nu reușesc.

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

@MarioTorres nu posta răspunsuri ca soluții, am transformat-o într-un comentariu, dar nu sunt sigur dacă acesta a fost răspunsul la care răspundeai. Dacă ai o întrebare nouă, ar trebui să folosești butonul de adăugare întrebare din partea de sus

Tom J Nowell Tom J Nowell
14 feb. 2021 21:18:35
Arată celelalte 2 comentarii
0

Vă recomand să rămâneți la URL-urile cu litere mici pe care le folosește WordPress (consider că URL-urile cu litere mici sunt o practică recomandată oricum), dar să configurați redirecționări 301 pentru toate URL-urile care vă provoacă această problemă. Am observat că de obicei se ajunge la complicații atunci când încercați să forțați o platformă să nu facă ceea ce vrea să facă în mod natural, iar structura URL-urilor este profund integrată în arhitectura WordPress.

Am scris un alt răspuns care este foarte asemănător cu nevoile dumneavoastră, iar acel exemplu vă poate arăta cum să folosiți hook-ul 'template_redirect' pentru a seta o redirecționare pentru acele URL-uri unde aveți această problemă:

Dacă aveți nevoie de clarificări suplimentare, nu ezitați să întrebați.

8 dec. 2010 10:54:10
0

Din câte am înțeles, motoarele de căutare nu sunt sensibile la majuscule, deși URL-urile sunt sensibile la majuscule. Aș recomanda eliminarea formatului de fișier cu majuscule, deoarece este greu pentru utilizatori să-și amintească.

Dacă chiar doriți să rămâneți la structura anterioară, va trebui să lucrați cu regexp (expresii regulate) în fișierul .htaccess.

8 dec. 2010 09:15:14
0

FEV 2020

De la răspunsul lui Jan Fabry, funcția WordPress s-a schimbat puțin, așadar fragmentul corect pentru versiunea 5.6 este:

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 );
    // Păstrează octeții escapați.
    $title = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title );
    // Elimină semnele procent care nu fac parte dintr-un octet.
    $title = str_replace( '%', '', $title );
    // Restaurează octeții.
    $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 ) {
        // Converteste &nbsp, &ndash, și &mdash în liniuțe.
        $title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );
        // Converteste entitățile HTML &nbsp, &ndash, și &mdash în liniuțe.
        $title = str_replace( array( ' ', ' ', '–', '–', '—', '—' ), '-', $title );
        // Converteste slash-ul înainte în liniuță.
        $title = str_replace( '/', '-', $title );

        // Elimină complet aceste caractere.
        $title = str_replace(
            array(
                // Liniuțe moi.
                '%c2%ad',
                // &iexcl și &iquest.
                '%c2%a1',
                '%c2%bf',
                // Ghilimele unghiulare.
                '%c2%ab',
                '%c2%bb',
                '%e2%80%b9',
                '%e2%80%ba',
                // Ghilimele creț.
                '%e2%80%98',
                '%e2%80%99',
                '%e2%80%9c',
                '%e2%80%9d',
                '%e2%80%9a',
                '%e2%80%9b',
                '%e2%80%9e',
                '%e2%80%9f',
                // Punct de listă.
                '%e2%80%a2',
                // &copy, &reg, &deg, &hellip, și &trade.
                '%c2%a9',
                '%c2%ae',
                '%c2%b0',
                '%e2%80%a6',
                '%e2%84%a2',
                // Accente acute.
                '%c2%b4',
                '%cb%8a',
                '%cc%81',
                '%cd%81',
                // Accent grav, macron, caron.
                '%cc%80',
                '%cc%84',
                '%cc%8c',
            ),
            '',
            $title
        );

        // Converteste &times în 'x'.
        $title = str_replace( '%c3%97', 'x', $title );
    }
    // Elimină entitățile.
    $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;
}

Editorul va continua să afișeze URL-ul cu litere mici, dar va fi salvat exact așa cum l-ați trimis, fără a schimba capitalizarea.

Obs: s-ar putea să nu fie o idee bună să folosiți acest tip de funcție, deoarece modelul cu litere mici este mai convenabil.

2 feb. 2021 18:04:58
0

Fac acest lucru direct pe tabela mysql și funcționează perfect: introdu descrierea imaginii aici

23 iul. 2020 00:48:18
0

Poți încerca această soluție. Lipește codul de mai jos în fișierul functions.php al temei tale. Funcționează pentru mine.

// Elimină filtrul existent
remove_filter( 'sanitize_title', 'sanitize_title_with_dashes' );

// Funcție pentru a păstra majusculele în slug-uri
function maintain_capitalization_slug($title, $raw_title, $context) {
// Se aplică doar la salvarea slug-urilor
if ($context === 'save') {
    // Păstrează majusculele și înlocuiește caracterele speciale cu liniuțe
    $title = preg_replace('/[^a-zA-Z0-9]+/', '-', $raw_title); // Înlocuiește caracterele non-alfanumerice cu liniuțe
    $title = trim($title, '-'); // Elimină liniuțele de la început/sfârșit
}
return $title;
}

// Aplică funcția personalizată la 'sanitize_title'
add_filter('sanitize_title', 'maintain_capitalization_slug', 10, 3);
30 apr. 2024 04:08:34