Глюк с заглавной буквой title в плагине All in One SEO

Monday, 27 Apr 09 в 23:20

Плагин All in One SEO достаточно популярен у меня в блоге, уже третий раз о нем пишу. Для тех, кто не в курсе что он делает из зачем нужен советую почитать заметку как легко увеличить трафик для блога с поисковиков (с его помощью, разумеется). Чуть позже я рассказывал как избавиться от автоматического добавления тегов поста в keywords. Да, я знаю, что для этого имеется галочка в настройках админки, но по удивительным причинам эта опция не сработала. Возможно, в новых версиях пофиксили.

Сегодня у меня выскочил еще один стары глюк плагина All in One SEO. Открывая страницу тегов, категорий или поиска первые буквы в title отображались не совсем корректно:

плагин All in One SEO

Конечно, это было недопустимо для меня, и могло нарушить мои планы относительно раскрутки проекта.

Что характерно – данные признаки можно увидеть не на всех хостингах, видимо это как-то связанно с настройками веб-сервера. Я, увы, не специалист в этом, поэтому принялся изучать и экспериментировать с php кодом плагина. Кстати, ранее я как-то уже искал выход из сложившейся ситуации в google, но вразумительного объяснения найти не смог – кто-то советовал поставить русскую версию плагина, кто-то предлагал скачать «пофиксеную» (но весьма древнюю) версию модуля. Собственно, такая у меня уже имелась и хорошо работало на одном из хостингов, а вот на другом почему-то отказалась. Поэтому было принято решения потратить лишний часик и разыскать первопричину столь безобразной работы wordpress плагина All in One SEO. Вот что было обнаружено мной в процесс исследований (весь код взят из файла all_in_one_seo_pack.php).

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

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

Но вот беда. Теги все равно выводились с ошибками. Оказывается над ними также выполнялись подобные преобразование, правда, несколько иным путем. В плагине имеется функция capitalize, которая, насколько я понял, была создана для решения той же задачи, что и ucwords. Вообще тут в коде как-то все запутанно, возможно, там каким-то образом еще участвует массив в начале поста $UTF8_TABLES['strtoupper']. Но копаться в этом я не стал, а просто закомментировал вызов этой функции в ходе работы. Хотя достаточно просто убрать одну из ее строк, которая занимается собственно, преобразованием.

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

После всего этого залил новую версию файла all_in_one_seo_pack.php на сервер и все заработало так, как должно было.

P.S. Я знаю, что есть другие плагины для ввода заголовка и других seo-штук, об этом уже дискутировали, меня All in One SEO устраивает, в принципе. Пост чисто образовательного характера, «для справки» можно сказать, поскольку в 90% источников, где упоминалась данная проблема, так и не было приведено решения.

P.P.S. Для интересующихся покером советую почитаь – расчет вероятностей в покере!

Поисковое продвижение сайтов от профессионалов для привлечения новых клиентов.

Рыбалка – ваше любимое занятие? – обязательно загляните в этот интернет-магазин.

Понравился пост? Подпишись на обновления блога по RSS для блоггеров и вебмастеровRSS, RSS для блоггеров и вебмастеровEmail или twitter для блоггеров и вебмастеровtwitter!
Добавить комментарий

Комментариев - 12 для данного поста

  1. Ney Пишет:

    На самом деле проблема довольно популярная. При работе с мультибайтовыми строками (UTF-8) стандартные строковые функции PHP некорректно работают. Нужно использовать мультибайтовые строковые функции из библиотеки mbstring (http://php.net/mbstring).
    Например, вместо strtoupper($str) надо писать mb_strtoupper($str, ‘UTF-8′).

  2. Tod Пишет:

    Ney, спасибо за информацию) я в php какбы не сильно разбираюсь, поэтому просто убрал эти функции.

  3. @ Сергей Пишет:

    Александр, спасибо большое! Воспользовался твоим хинтом и – проблема решена. Комментарий Ney тоже верный – он всё правильно уточнил.

  4. Дмитрий Пишет:

    Очень долго искал что-то внятное по проблеме первой буквы..
    Спасибо, tod’у за простой способ избавления от проблемы.
    Пофиксил All in One Seo Pack 1.5.6. Работает на УРА!

  5. @ Gambler Пишет:

    Сегодня возился с этой проблемой, названия категорий пропали, а с тегами стало все в порядке, наверное просто другая версия плагина была, короче поставил я по итогу последнюю версию (на сегодняшнее утро – 1.6.4.1) и тут без проблем все работает.

    Кстати старый плагин отлично работает на укр хостинге Hvosting, а на рос Мастерхосте заглючил.

  6. Yury Пишет:

    может вы знаете решение этой же проблемы для новой версии плагина 1.6.1
    в ней таких строк даже нету, а проблемы вот остались (

  7. Tod Пишет:

    Нужно копаться в коде. Кстати, в последней версии плагина вроде бы исправили – там есть в настройках галочка “делать заглавной первую букву”, насколько я помню.

  8. Dinka Пишет:

    Спасибо, это замечательное решение работает и в последней версии 1.6.8.1.
    Но, тем кто не нашел – этот код, описанный в статье, нужно просто найти в файле aioseop.class.php в папке плагина. И все работает :)

  9. SeoAdvicer Пишет:

    В новых версиях плагина все немного изменилось. Описал здесь: http://seoadvicer.ru/all-in-one-seo-pack-bag/
    Хотя принцип остался тот же, но новичок не разберется ;)

  10. Маша Пишет:

    Наконец, нашёлся блог, где описана проблема, то всё никак не получалось найти способ как её побороть. Оказывается хватило версию плагина поменять! :)

  11. Макс Пишет:

    Сделал как написано – пока все по старому. Поставил Платинум Сео Пэк – тоже самое….
    Разобрался. Ошибся в одном месте, отлично!

  12. koba Пишет:

    Спасибо за подсказку по галочке – Capitalize Category Titles:, у меня версия 1.6.13.1, убрал галку и стало нормально отображаться

Оставить комментарий (правила комментирования)