Глюк с заглавной буквой title в плагине All in One SEO
Плагин All in One SEO достаточно популярен у меня в блоге, уже третий раз о нем пишу. Для тех, кто не в курсе что он делает из зачем нужен советую почитать заметку как легко увеличить трафик для блога с поисковиков (с его помощью, разумеется). Чуть позже я рассказывал как избавиться от автоматического добавления тегов поста в keywords. Да, я знаю, что для этого имеется галочка в настройках админки, но по удивительным причинам эта опция не сработала. Возможно, в новых версиях пофиксили.
Сегодня у меня выскочил еще один стары глюк плагина All in One SEO. Открывая страницу тегов, категорий или поиска первые буквы в title отображались не совсем корректно:
Конечно, это было недопустимо для меня, и могло нарушить мои планы относительно раскрутки проекта.
Что характерно — данные признаки можно увидеть не на всех хостингах, видимо это как-то связанно с настройками веб-сервера. Я, увы, не специалист в этом, поэтому принялся изучать и экспериментировать с 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. Для интересующихся покером советую почитаь — расчет вероятностей в покере!
Поисковое продвижение сайтов от профессионалов для привлечения новых клиентов.
На самом деле проблема довольно популярная. При работе с мультибайтовыми строками (UTF-8) стандартные строковые функции PHP некорректно работают. Нужно использовать мультибайтовые строковые функции из библиотеки mbstring (http://php.net/mbstring).
Например, вместо strtoupper($str) надо писать mb_strtoupper($str, ‘UTF-8’).
Ney, спасибо за информацию) я в php какбы не сильно разбираюсь, поэтому просто убрал эти функции.
Александр, спасибо большое! Воспользовался твоим хинтом и — проблема решена. Комментарий Ney тоже верный — он всё правильно уточнил.
Очень долго искал что-то внятное по проблеме первой буквы..
Спасибо, tod’у за простой способ избавления от проблемы.
Пофиксил All in One Seo Pack 1.5.6. Работает на УРА!
Сегодня возился с этой проблемой, названия категорий пропали, а с тегами стало все в порядке, наверное просто другая версия плагина была, короче поставил я по итогу последнюю версию (на сегодняшнее утро — 1.6.4.1) и тут без проблем все работает.
Кстати старый плагин отлично работает на укр хостинге Hvosting, а на рос Мастерхосте заглючил.
может вы знаете решение этой же проблемы для новой версии плагина 1.6.1
в ней таких строк даже нету, а проблемы вот остались (
Нужно копаться в коде. Кстати, в последней версии плагина вроде бы исправили — там есть в настройках галочка «делать заглавной первую букву», насколько я помню.
Спасибо, это замечательное решение работает и в последней версии 1.6.8.1.
Но, тем кто не нашел — этот код, описанный в статье, нужно просто найти в файле aioseop.class.php в папке плагина. И все работает :)
В новых версиях плагина все немного изменилось. Описал здесь: http://seoadvicer.ru/all-in-one-seo-pack-bag/
Хотя принцип остался тот же, но новичок не разберется ;)
Наконец, нашёлся блог, где описана проблема, то всё никак не получалось найти способ как её побороть. Оказывается хватило версию плагина поменять! :)
Сделал как написано — пока все по старому. Поставил Платинум Сео Пэк — тоже самое….
Разобрался. Ошибся в одном месте, отлично!
Спасибо за подсказку по галочке — Capitalize Category Titles:, у меня версия 1.6.13.1, убрал галку и стало нормально отображаться