Поиск по сайту

Недавно столкнулся с такой проблемой: на страницах категорий и меток (тегов) заглавие, т.е. в теге title, первые буквы выводились не правильно. Виной всему оказался плагин all in one seo pack. Как так вышло, что раньше этого бага не было, – сказать трудно. Быть может я обновлял плагин, и баг появился с новой его версией, хотя сразу я бага не заметил. В общем, было принято решение исправить ситуацию. И вот как мне это удалось сделать.

Прежде всего хочу сказать, что поиск в интернете особо ничего не дал, хотя и натолкнул на определенные мысли. А дело всё в том, что информация имелась для старых версий плагина. Объяснялось все на примерах функций, которых в новой версии я не нашел. По крайней мере там, где обещали авторы. Пришлось просматривать код самому.

В общем, если вы немного разбираетесь в php, вот мануал по решению проблемы:

Ищем файл плагина, который по умолчанию лежит здесь: /wp-content/plugins/all-in-one-seo-pack/ Файл называется aioseop.class.php. Открываем его и видим там много строк и функций. Нам понадобиться такая строка:

$category_name = ucwords($this->internationalize(single_cat_title('', false)))

Она встречается в файле минимум 3 раза. И ещё один раз это строка закомментирована. Комментированную строку можно не трогать, а вот другие заменяем на:

$category_name = $this->internationalize(single_cat_title('', false));

Таким образом мы решили проблему с первой букве в категориях. Что касается меток, тут ещё проще – ищем строку

$tag = $this->capitalize($tag);

и закомментируем её с помощью // . Выглядить будет так:

//$tag = $this->capitalize($tag);

Кстати, такая же проблема возникает и с заголовками поиска по сайту. Решается она аналогично с метками. Ищете строку (встречается 2 раза):

$search = $this->capitalize($search);

И комментируете её:

//$search = $this->capitalize($search);

Естественно, сохраняем это все и загружаем на сервер, если вы редактировали файл у себя на компьютере.

Что мы сделали? Мы запретили плагину заменять первые буквы категорий и меток, который правильно делать это не умеет. Лично мне нет надобности в этой функции, так как категории я и так пишу всегда с заглавной, а теги на то и теги, чтоб с маленькой буквы писались :) .

Если же вам все-таки жизненно необходимо выводить метки и результаты поиска с заглавной буквы, тогда можно просто в лоб заменить первые буквы на заглавные. Для этого, во-первых, не нужно комментировать те строки, которые мы закомментировали выше. Во-вторых, ищем в том же файле такой кусок кода:

function capitalize($s) {
 $s = trim($s);
 $tokens = explode(' ', $s);
 while (list($key, $val) = each($tokens)) {
 $tokens[$key] = trim($tokens[$key]);
 $tokens[$key] = strtoupper(substr($tokens[$key], 0, 1)) . substr($tokens[$key], 1);
 }
 $s = implode(' ', $tokens);
 return $s;
 }

Это именно та функция, которая отвечает за регистр первых букв для меток и результатов поиска. Немного видоизменяем эту функцию таким образом:

function capitalize($s) {
 $s = trim($s);
 $s = str_replace("й","Й",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ц","Ц",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("у","У",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("к","К",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("е","Е",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("н","Н",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("г","Г",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ш","Ш",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("щ","Щ",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("з","З",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("х","Х",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ъ","Ъ",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ф","Ф",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ы","Ы",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("в","В",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("а","А",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("п","П",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("р","Р",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("о","О",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("л","Л",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("д","Д",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ж","Ж",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("э","Э",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("я","Я",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ч","Ч",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("с","С",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("м","М",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("и","И",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("т","Т",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ь","Ь",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("б","Б",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ю","Ю",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("ё","Ё",substr($s, 0, 2)) . substr($s, 2);
 $s = str_replace("q","Q",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("w","W",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("e","E",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("r","R",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("t","T",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("y","Y",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("u","U",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("i","I",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("o","O",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("p","P",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("a","A",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("s","S",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("d","D",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("f","F",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("g","G",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("h","H",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("j","J",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("k","K",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("l","L",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("z","Z",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("x","X",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("c","C",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("v","V",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("b","B",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("n","N",substr($s, 0, 1)) . substr($s, 1);
 $s = str_replace("m","M",substr($s, 0, 1)) . substr($s, 1);
 return $s;
 }

Как видите, теперь плагин All in One Seo Pack заменяет первые буквы на заглавные не с помощью спец. функций php, а с помощью прямой замены символов. Перебирает все возможные символы (кириллицу и латиницу) и выводит результат в теге tittle. Эту функцию можно упростить, написав массив из символов и цикл, но я не стал углубляться в программирование. Так проще и понятней новичку.

Кстати говоря, чтобы категории тоже меняли заглавные буквы необходимо добавить к строкам, которые вы меняли выше (для категорий) следующие:

$category_name = $this->capitalize($category_name);

Это нужно сделать столько же раз, сколько вы меняли строки для категорий.

Помните, что файл нужно сохранять в кодировке UTF-8, иначе будут отображаться одни каракули в итоге.

Надеюсь, не очень запутанно. Делайте все пошагово, и у вас все получится. В крайнем случае обращайтесь за помощью ко мне. Координаты на странице контактов, или пишите в комментариях ниже.

Постовые: Не нравится разбирать коды wordpress? Тогда собирайте конструктор lego star wars.
Девочкам интереснее куклы zapf, или как их ещё называют куклы цапф.
Эти и другие игрушки можно приобрести в магазине playmobil с большим выбором игрушек от playmobil.

Купить постовые на seoadvicer.ru можно в RotaPost и Блогуне. Ссылки в архивных записях можно купить через GoGetLinks.
В Интернете трудно найти что-то полезное? - Подпишись на RSS и проблем станет меньше.
Получать обновления на

10 комментариев к: Проблема с плагином All in One Seo Pack – глюк заглавной буквы

  1. Dima
    08 Январь 2010 год, 10:49

    Спасибо огромное, бесценная инфа ! Хотя, честно говоря, AIO SEO уже достал – с каждым обновлением приходится исправлять проблемы с кодировкой. Надо какую-то альтернативу подыскать…

  2. SeoAdvicer
    08 Январь 2010 год, 11:24

    @Dima: на самом деле подобных плагинов много, просто это самый распространенный и все к нему уже привыкли. Лично я наверное заменять его чем-то другим пока не собираюсь.

  3. Remix
    21 Март 2010 год, 09:30

    Спасибо Вам большое!! 2-й день мучаюсь с квадратами в заглавной в тэгах.. только благодаря Вашей инструкции все исправила. еще раз – огромадный респект!!

  4. Max
    31 Март 2010 год, 12:06

    Сделал все как надо, но все осталось по-прежнему. Поставил Платинум СЕО Пэк. Все также. Это только для новых постов работает, а старые так и остаются или как?

  5. SeoAdvicer
    30 Апрель 2010 год, 03:38

    @Max: работает для любых записей – и старых и новых.

  6. Georg
    13 Май 2010 год, 08:46

    Большое спасибо, исправление старых версий было уже привычным делом, а вот с новыми возникли проблемы, которые удалось решить с вашей помощью.

  7. Holzweg
    21 Сентябрь 2010 год, 12:51

    Спасибо огромное! Сэкономил кучу времени, благодаря вам.

  8. Тема
    27 Январь 2011 год, 09:35

    Спасибо! Оч выручил, я уже хотел сайт переносить на другой хост.
    Респект;)

  9. Oleg
    21 Февраль 2011 год, 05:50

    Спасибо, странно, что такой жирный баг разработчики уже год не могут исправить.

  10. Святослав
    18 Апрель 2011 год, 09:43

    Привет. Раз можно спрашивать, то спрашиваю)))). Не встречали ли вы такую проблему с этим плагином. При обновлении старой уже опубликованной записи (например нашел грамматическую ошибку), страница админки не рефрешиться, а просто появляется белый экран с названием статьи в правом верхнем углу. При чем статья-то все-таки обновляется, просто нужно все время после нажатия кнопки «обновить» нажимать назад и рефреш. Вроде бы на работу блога не влияет, но просто вымораживает. Не люблю когда что-то работает не так как надо. При выключенном плагине проблема исчезает. Спасибо!

Комментарии через RSS · Трэкбеки URI

Оставить комментарий

Имя *

email (не публикуется) *

Сайт

Я не робот *

© iDeny, 2009 - 2011. Главная, Спонсоры, Карта сайта.

При копировании материалов гиперссылка на сайт обязательна.