Глюк с заглавной буквой title в плагине All in One SEO
Monday, 27 Apr 09 в 23:20Плагин 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. Для интересующихся покером советую почитаь – расчет вероятностей в покере!
Поисковое продвижение сайтов от профессионалов для привлечения новых клиентов.
Рыбалка – ваше любимое занятие? – обязательно загляните в этот интернет-магазин.

Форма обратной связи может пригодиться любому сайту (простому или, тем более, корпоративному), а также является неплохим дополнением для блогов на WordPress. Это дополнительная возможность быстро связаться с автором проекта, если под рукой нет ни аськи, ни почтовика. Вот и у меня возникла данная задача, пошел просматривать существующие плагины. Сразу нашел некий cformsII, который позволяет, судя по отзывам, создать самую могущественную и функциональную форму обратной связи, которая только существует:) Посмотрел обзоры и документацию – действительно там все выглядит очень масштабно. Но, поскольку, мне требуется лишь простая форма для оправки сообщения на почту с базовыми полями типа «Имя», «Мыло», «Сообщение», то я решил продолжить поиски.

В одной из прошлых статей я уже писал о том, 
