Cum pot crea permalink-uri cu litere mari (upper-case)? | Ghid WordPress
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...

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;
}

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

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

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

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.

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.

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  , &ndash, și &mdash în liniuțe.
$title = str_replace( array( '%c2%a0', '%e2%80%93', '%e2%80%94' ), '-', $title );
// Converteste entitățile HTML  , &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',
// ¡ și ¿.
'%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',
// ©, ®, °, &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 × î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.

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);
