Пермалинк так сложился
Вчера вечером нашёл, а сегодня утром окончательно разобрался с одной очень интересной ошибкой плагина All in One SEO Pack. Ошибка проявляется в версии 1.4.6.15, но, возможно, более ранние версии тоже ей подвержены. Для проявления ошибки необходима определённая структура пермалинков: я столкнулся с ошибкой на такой структуре: /%category%/%postname%/
. Тем не менее, структура — условие необходимое, но не достаточное: я не на всех сайтах смог воспроизвести ошибку. Возможно, причиной этому являются сторонние темы и/или плагины. Тем не менее, в причинах её возникновения я разобрался.
Проявляется ошибка следующим образом: при переходе на сайт по неверной ссылке (например, http://example.com/wpadmin
) отображается пустая страница, а в логе ошибок присутствует примерно такое сообщение:
Не буду ручаться за номер строки (я добавлял отладочный код для идентификации ошибки, а после удаления кода количество пустых строк могло не совпасть), но код, соответствующий данной строке, выглядит так:
- } else if (is_category() && !is_feed()) {
- $category_description = $this->internationalize(category_description());
- $category_name = ucwords($this->internationalize(single_cat_title('', false)));
- $title_format = get_option('aiosp_category_title_format');
- $title = str_replace('%category_title%', $category_name, $title_format);
- $title = str_replace('%category_description%', $category_description, $title);
- } else if (is_page()) {
Ошибка проявляется в предпоследней строке. Я не стал углубляться в логику канонического переписывания URL, но получается так, что WordPress считает, что wpadmin
— это имя категории. Я так и не понял, почему он не выдаёт 404 (возможно, виноват сторонний плагин), но факт остаётся фактом. Так как эта категория не существует, функция category_description()
возвращает WP_Error
, а не строку. Теоретически, ошибка могла проявиться в методе internationalize()
, но это редкий случай.
Итак, чтобы исправить ошибку, нам нужно добавить простую проверку результата, возвращаемого функцией category_description()
.
Получим такой патч:
+++ all_in_one_seo_pack.php 2008-12-18 07:05:39.000000000 +0200
@@ -789,6 +789,10 @@
}
function internationalize($in) {
+ if (false == is_scalar($in)) {
+ return '';
+ }
+
if (function_exists('langswitch_filter_langs_with_message')) {
$in = langswitch_filter_langs_with_message($in);
}
а как посмотреть этот лог ошибок, где?
приобрел хостинг, ставлю чистый вордпресс 2.7 (пробовал и 2.6.5), даже без плагинов - часто пустые страницы при переходах по страницам. неверные запросы в никуда.
если запрос перебить новым кликом - грузится
но эти пропажи утомили. я уже хостинг решил менять
ибо мне в тех. поддержки пишут - проблема у вас.
а я тестировал файлы на другом хостинге, бесплатном - работает без пропажи запросов, но медленно слегка
вот может лог ошибок даст знать, чв чем же дело =(
Лог ошибок обычно живет там же, где и остальные логи Апача. Но можно сделать так:
ini_set('error_log', '/path/to/my/error.log');
а куда это прописывать, если сервер запускал не я? а я лишь покупаю хостинг и хочу отследить ошибки запросов вордпресса
В
wp-config.php
перед подключениемwp-settings.php
.спасибо большое
Здравствуйте, Владимир!
Просто уже не знаю, куда писать…
Установила себе тему (отсюда
http://topwpthemes.com/classicmag/
), русифицировала. Тема простояла полдня, а потом сбросилась на дефолтную. Так повторялось несколько раз. Была мысль, что в теме есть ошибка. Однако после установки другой темы произошло то же самое. Возникло подозрение, что есть конфликт с каким-то плагином. Вычислить его мне так и не удалось, а проблемы пошли дальше. Раньше все ЧПУ у меня были вида http://maldiva.ru/?p=123. Но новая тема с такими ЧПУ выдавала ошибку 404, поэтому пришлось выбрать произвольный вид /index.php/%postname%/. После этого ни одна тема вообще не хочет работать с ЧПУ другого вида, только с произвольным вариантом. Почему???На мыло стали приходить сообщения такого характера: Bad Link To /index.php/%25d0%25b4%… Раньше такого никогда не было. С чем это связано?
На форумах поддержки WP ответа я так и получила(((( Очень прошу вас, помогите, пожалуйста, разобраться. Подскажите, где искать проблему?
Напишите, пожалуйста, мне в аську — 290736765.
Я написала. Но вас или нет, или мое сообщение к вам не дошло (возможно, антиспам-бот сработал)(((((((
Ирина, я ответил Вам по e-mail