Как автоматически обновлять WordPress Lecactus Edition (версия 2.7 и новее) без вмешательств в ядро системы
Сегодня утром получил очень интересное и неожиданное письмо от , который написал мне функцию, позволяющующую делать то же самое что делалось через «хак файла», но более элегантным способом – без вмешательства в исходный код и доступную к использованию любому.
Функция проста, но эффективна. Она ищет в базе значение «оригинального домена» и заменяет на «произвольный, который прописан в функции». Тот же самый «поиск и замена». Функцию я эту сделал в виде плагина и добавил также в файл ru_RU.php который находится в папке с языковыми файлами и автоматически подключается при выставленном в wp-config.php русском языке. Плагин идет в комплекте, но активировать его не обязательно. он включен только для того чтобы можно было включить «обновления с моего сайта» при случайном удалении/повреждении/изменении ru_RU.php.
20декабря2008г: Выложен обновленный плагин версии 1.1, который убирает конфликт если вы случайно активировали плагин и у вас выдает ошибку. можно теперь использовать одновременно и то что прописано в ru_RU.php и в плагине. Можете скачать обновленный архив. Дистрибутив также обновлен. Отдельно плагин можно
скачать по этой ссылке
. Плагин можно устанавливать и пользователям “официальной версии” чтобы при следующем обновлении автоматически перейти на мою версию.
Не важно ставили или нет вы вчерашний «пакет исправлений», но вы можете просто поставить сейчас новый, который возвращает на место оригинальный updates.php и добавляет в систему вышеназванную функцию «без вмешательство в ядро системы».
Сразу после установки вы не заметите эффекта, т.е. у вас будет писаться «URL на официальный сайт». Эффект будет заметен только при выходе следующей версии, а для тех кто хочет полностью убедиться что оно работает – достаточно в wp-includes/version.php временно изменить $wp_version = '2.7'; на $wp_version = '2.6';. У вас выскочит сообщение что требуется обновиться и при переходе на страницу обновлений вы увидите что у вас изменился URL на вот такой
.
Таким образом у вас остается на 100% «оригинальное ядро» и все изменения сделаны через внешние функции, как это хотели видеть некоторые пользователи.
Связанные записи
34 комментария
Трэкбеки и пингбеки
Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии выше и FAQ! Прежде чем задавать вопрос, прочитайте это. Научитесь ценить чужое время!



16 декабря 2008 в 14:28 (GMT+6)
Отлично. Спасибо. Перенесу код из плагина в functions.php моей темы.
16 декабря 2008 в 14:30 (GMT+6)
Хотя… если присутствует в ru_RU.php то плагин то ведь и не нужен…
16 декабря 2008 в 14:34 (GMT+6)
ScorpAL, ага. нафига переносить в код темы, если ру_ру.пхп автоматом подключается :) а плагин это «на всякий случай для комплекта»
16 декабря 2008 в 14:58 (GMT+6)
Кактус, есть идея.
Раз уж появился ru_RU.php то, мне кажется, было бы вполне логичным перенести в него русские даты от Макса.
Так же было бы не плохо перенести туда же и rus to lat (ISO, но несколько подправить с учетом реалий и SEO).
Что думаешь?
16 декабря 2008 в 15:01 (GMT+6)
Один хрен, это можно сказать, чуть ли не обязательные дополнения для русского вордпресса.
16 декабря 2008 в 15:03 (GMT+6)
ну в общем раньше этот файл тоже у меня был – там подправлены стили админки для учета русских длинных слов.
да, можно, раньше этот файл тоже мог использоваться (в старых версиях вп до 2.2.3 от Антона был рус2лат туда подключен), но этими функциями не все пользуются.
в общем это личное дело каждого.
PS могу поставить голосование :)
16 декабря 2008 в 15:05 (GMT+6)
я согласен, но не все их используют + плагины не будут работать там если включен лайт перевод – появляется еще необходимость использовать ru_RU_lite.php … плагинами проще управлять. включил и пусть работает
16 декабря 2008 в 15:33 (GMT+6)
c ru_RU_lite есть еще одна проблема.
не забываем что в дефолтной теме присутствует код:
<?php language_attributes(); ?>Который при включеннмо лайт переводе сгенерирует
lang="ru-RU-lite"Что не есть стандартно.
Мне кажется, нужно как-то пересмортеть подключение лайт перевода так что бы переменная $locale из l10n.php всегда оставалась как ru-RU. А вот файл перевода использовался бы уже в зависимости от того где находимся.
Тем сама и плагины будут всегда думать именно про ru-RU, а не гоняться за виртуальным ru-RU-lite.
Нужно хорошенько обдумать.
16 декабря 2008 в 15:51 (GMT+6)
Например в файле l10n.php есть такая строка в функции load_default_textdomain():
$mofile = WP_LANG_DIR . "/$locale.mo";так вот.. реврайтать дефолтные функции вордпресса своими можно или нет?
Если можно, то подменить вышеприведенный код чем то вроде этого:
if (strpos($_SERVER['REQUEST_URI'], 'wp-admin')) {$mofile = WP_LANG_DIR . "/$locale.mo";
} else {
$mofile = WP_LANG_DIR . "/$locale" . "-lite" . ".mo";
}
Но таких замен придется сделать 3 (для load_default_textdomain, для load_plugin_textdomain, и для load_theme_textdomain). что не есть хорошо.
Смотрим альтернативу.
И видим… что все эти 3 функции использую load_textdomain.
Может можно попробовать перехватить вызов функции load_textdomain, заменить в ней в соответсвии с нашим текущим положением параметр $mofile (оставив как есть, либо добавив при помощи regexp суфикс -lite).
Я не программер. И как сделать это практически – я не знаю.
Но чувствую, что истина где-то рядом ;)
load_textdomain('default', $mofile);16 декабря 2008 в 15:52 (GMT+6)
упс! файлы загрузил, а не активируется. выдает:
Плагин не может быть активирован, поскольку он вызвал фатальную ошибку
Fatal error: Cannot redeclare change_update_url() (previously declared in /home/MYSITE/public_html/wp-content/languages/ru_RU.php:21) in /home/MYSITE/public_html/wp-content/plugins/lecactus_edition_update_url.php on line 19
16 декабря 2008 в 16:12 (GMT+6)
Отлкюлчи плагин. Вошибке ведь ясно написано что плагин просто не может изменить то что уже изменено файлом ru_RU.php.
Кактус. Инструкцию обнови. Мол нужно либо это либо это.
16 декабря 2008 в 18:39 (GMT+6)
ScorpAL, нафига такие извращения – вот это уже действительно непредсказуемо себя поведет. то что сделано сейчас это элементарно просто и надежно (и проверено было еще год назад Максимом) – то что мы называем «лайт-переводом» — это то что просто типа ДРУГОЙ язык подключается на морду сайта. т.е. админку можем иметь на русском, а морду на китайском и наоборот. и всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файла. у меня среди более 50 установленных плагинов это потребовало всего несколько файликов. а если делать как предложено выше то будет тоже самое что вообще ничего не делать.
16 декабря 2008 в 18:41 (GMT+6)
ScorpAL,
внимательный читатель ошибки не сделает. а то обычно скачают – жмут активировать, жалуются в комент а потом пишут что написано выше: а там написано:
вариант номер два – просто чтобы названия фунций были разные :)