ЧПУ в WordPress без плагина

    22 комментария 232

ЧПУ в WordPressЗдравствуйте, дорогие друзья. Я не буду рассказывать о том, что такое ЧПУ. Если вы это читаете, то наверняка уже в курсе. Не так давно я просматривал выдачу в поисковых системах по запросу: настройка ЧПУ в WordPress и буквально под каждой ссылкой было одно и то же. Все, без исключения рекомендовали для начала установить плагин RusToLat. И это правильно, первым делом нужно сделать транслитерацию, то есть конвертировать русские символы в латинские. Я тоже писал об этом в статье о полезных плагинах для WordPress. Но недавно пришел к выводу, что можно отказаться от этого плагина. Не совсем конечно. Хоть сам плагин и имеет всего один файл, но все же создает пункт в административной части. А он там просто не нужен, поскольку настраивать там нечего.

Поэтому настройку ЧПУ в WordPress можно сделать без плагина, ограничившись простой вставкой кода в файл functions.php. Вот этот кусок кода нужно вставить в файл. Можно вставить в самый конец, перед закрывающим ?>.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//rus-to-lat
$gost = array(
   "Є"=>"EH","І"=>"I","і"=>"i","№"=>"#","є"=>"eh",
   "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
   "Е"=>"E","Ё"=>"JO","Ж"=>"ZH",
   "З"=>"Z","И"=>"I","Й"=>"JJ","К"=>"K","Л"=>"L",
   "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
   "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"KH",
   "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
   "Ы"=>"Y","Ь"=>"","Э"=>"EH","Ю"=>"YU","Я"=>"YA",
   "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
   "е"=>"e","ё"=>"jo","ж"=>"zh",
   "з"=>"z","и"=>"i","й"=>"jj","к"=>"k","л"=>"l",
   "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
   "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"kh",
   "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
   "ы"=>"y","ь"=>"","э"=>"eh","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"
  );
 
$iso = array(
   "Є"=>"YE","І"=>"I","Ѓ"=>"G","і"=>"i","№"=>"#","є"=>"ye","ѓ"=>"g",
   "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G","Д"=>"D",
   "Е"=>"E","Ё"=>"YO","Ж"=>"ZH",
   "З"=>"Z","И"=>"I","Й"=>"J","К"=>"K","Л"=>"L",
   "М"=>"M","Н"=>"N","О"=>"O","П"=>"P","Р"=>"R",
   "С"=>"S","Т"=>"T","У"=>"U","Ф"=>"F","Х"=>"X",
   "Ц"=>"C","Ч"=>"CH","Ш"=>"SH","Щ"=>"SHH","Ъ"=>"'",
   "Ы"=>"Y","Ь"=>"","Э"=>"E","Ю"=>"YU","Я"=>"YA",
   "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d",
   "е"=>"e","ё"=>"yo","ж"=>"zh",
   "з"=>"z","и"=>"i","й"=>"j","к"=>"k","л"=>"l",
   "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
   "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"x",
   "ц"=>"c","ч"=>"ch","ш"=>"sh","щ"=>"shh","ъ"=>"",
   "ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya","«"=>"","»"=>"","—"=>"-"
  );
 
function sanitize_title_with_translit($title) {
	global $gost, $iso;
	$rtl_standard = get_option('rtl_standard');
	switch ($rtl_standard) {
		case 'off':
		    return $title;		
		case 'gost':
		    return strtr($title, $gost);
		default: 
		    return strtr($title, $iso);
	}
}
add_action('sanitize_title', 'sanitize_title_with_translit', 0);

После этого все русские символы в ссылках станут латинскими. Ну а сама настройка ЧПУ в WordPress очень проста. Идем в параметры — постоянные ссылки и устанавливаем радиокнопку Произвольно или Название записи. Вот, собственно и все. Надеюсь, что проблем у вас с этим не возникнет. По крайней мере у меня все работает отлично. Если что, пишите в комментариях о возникающих проблемах. Будем решать вместе. Кстати, есть еще бесплатный конструктор WordPress шаблонов. Позволяет создать шаблон, исходя из ваших пожеланий.

Любая сумма на развитие сайта

22 комментария
  1. Спасибо за совет. Попробую сделать на своем сайте

  2. Код взят с плагина //rus-to-lat судя из кода предложенного автором. А вообще иногда полезно лазить в плагины и просматривать код. Часто поражаешься насколько все бывает просто ) 😉

  3. надеюсь, скоро возможность транслитерации с национальных языков встроят в WP. а вообще не вижу ничего плохого и в ссылках с кириллицей и в ссылках вида /post/20130727/43332 🙂

  4. Бек:

    здравствуйте! я сделал как Вы написали но у меня не заработало 🙁 я изменил кодировку с анси на ютф, но все равно не получилось и более того у меня шаблон кривой стал, не подскажите в чем дело ?

    • А до этого ссылки какого вида были на сайте?

      • Бек:

        по умолчанию было, т.е сайт.ру/?p=123
        но потом изменил на /%postname%/ и добавил новую запись для проверки, не получилось 😐

          • Бек:

            нет, уже в сети
            долго копал не получилось и поставил плагин КирТуЛат, работает, но хотелось бы сделать как у вас без плагина

          • Проверьте файл .htaccess. В нем должны быть эти строчки:

            1
            2
            3
            4
            5
            6
            7
            8
            
            <ifmodule mod_rewrite.c>
            RewriteEngine On
            RewriteBase /
            RewriteRule ^index.php$ - [L]
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteCond %{REQUEST_FILENAME} !-d
            RewriteRule . /index.php [L]
            </ifmodule>

            Если таких нет, добавьте и попробуйте повторить.

  5. Решил делать блог без плагинов. Попробовал сделать как вы предлагаете, все получилось! Спасибо большое! ❗

  6. Олег:

    Скажите, а если этот код поставить, когда уже плагин стоял долгое время, ни на что не повлияет? Он предназначен только для новых статей?

  7. max:

    админ а куда его ставить в functions.php. темы или в другой ?

  8. Андрей:

    Старые УРЛ-ы меняет, если нажать «Изменить», добавить какой-нить символ и нажать «ок». И потом опять «изменить» , сделать как надо и нажать «ок». А так он не меняет старые УРЛ-ы.
    В любом случае так удобней, чем ручками писать или плагин устанавливать.
    Автору, спасибо!))

  9. тут указана функция add_action(‘sanitize_title’… — т.е.е автозмаена символовпроисходитпри формировании slug. Что однозначно говорит о том, что транслитерация будет просиходить ТОЛЬКО во время сохранения поста или страницы! Если надо заменить старые урлы, то открывать записи, очищать старый урл и сохранять! Массовая замена старых на новые этот код не делает — и это правильно! по всем вопросам — пишите rul0004 СОБАКЕН ya.ru

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *