Как автоматически обновлять 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,
внимательный читатель ошибки не сделает. а то обычно скачают – жмут активировать, жалуются в комент а потом пишут что написано выше: а там написано:
вариант номер два – просто чтобы названия фунций были разные :)
16 декабря 2008 в 19:14 (GMT+6)
всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файлаСкорее это извращение.
А что именно используется из языковых файлов (и в каком случае) на морде сайта?
16 декабря 2008 в 19:48 (GMT+6)
ScorpAL, http://lecactus.ru/2008/11/15/3110/
никакое это не извращение. это вообще можно сказать “недокументированная функция”, которую пользователь использует по своему желанию. поэтому она у меня в дистрибутиве отключена. тем кто понимает что это и как использовать – это все делается(копии нужных файлов) за 5минут максимум и забывается. понять использует плагин перевод для морды сайта или нет легко – ставим плагин – если он без русификатора что то показывает на сайте по английски – значит лайт-файл нужен. если нет – нафиг. вот допустим у меня взять те самые «примерно 50 плагинов». из них к примеру перевод использует на морде 6штук. в сумме их переводы занимают около 50кбайт вместо 250кбайт общих. с одной стороны кажется пустяковые цифры – а когда оно используется полностью то за каждые 100кб кода перевода памяти кушает в среднем около 800кбайт.
смотрим в том же посте по ссылке выше:
Потребление памяти: 13.3MB – так у меня было с полными всеми переводами – это еще надо учитывать что у меня используется пхп-акселератор и без него цифра примерно в 3 раза выше.
сейчас у меня с лайт-переводами морды – 6-7мбайт потребление и скорость загрузки страниц существенно выше.
PS прекращаем оффтоп: если хочется продолжать – по ссылке выше http://lecactus.ru/2008/11/15/3110/ уже на 100коментов почти наговорено.
16 декабря 2008 в 23:54 (GMT+6)
автообновлялка – это гуд! сэнкс :)
17 декабря 2008 в 9:22 (GMT+6)
Кактус, собралась обновляться, прочитала инструкцию, очень сложно – не умею делать бекап и скриншоты. Можно установить – эту функцию автообновления на версию 2.6.5., чтобы все само автоматически обновилось до версии 2.7.
17 декабря 2008 в 9:52 (GMT+6)
Наталья (Елена Дру), http://lecactus.ru/2008/12/11/3377/ тут я уже раза три отвечал подробно. вручную это делается за 10минут примерно
17 декабря 2008 в 13:28 (GMT+6)
можно еще тут прочитать – так сказать глазами рядового пользователя. может так более доступно написано?
17 декабря 2008 в 13:43 (GMT+6)
thx
19 декабря 2008 в 9:03 (GMT+6)
Кактус, я немного зануда, но у меня стояли подписки на комментарии на твои версии, начиная с 2.6. Но подписка на комментарии о версии 2.7., это что-то, придеться отключить, не в состоянии все прочитать 20-30 писем в день. Столько людей мучаются, это ужас!
– это наверно только для тебя. Может пожелеешь пободных мне?
20 декабря 2008 в 1:40 (GMT+6)
по просьбам обновил плагин который теперь можно активировать даже если уже код включен в ru_RU.php
Дистрибутив обновил. Отдельно плагин можно скачать тут. добавлен реадми к плагину.
20 декабря 2008 в 9:23 (GMT+6)
Кактус, огромное спасибо, что пошел на встречу. Закачала плагин, активировала, 2 раза. Приглашение обновиться исчезло. Все без изменений.
Кстати в ридми написано автообновление без плагинов, а те, что стоят не исчезнут?
20 декабря 2008 в 11:48 (GMT+6)
Елена Дру, нет не исчезнут. имеется ввиду что в архиве который скачивается для обновления движка нет огромного набора плагинов. там идет сборка “normal”
20 декабря 2008 в 16:16 (GMT+6)
Кактус, подскажи, пожалуйста, почему плагин не действует, обновления не происходит?
20 декабря 2008 в 16:18 (GMT+6)
Наталья, в комментариях выше я вроде писал про это :)
20 декабря 2008 в 16:21 (GMT+6)
Точнее в самой записи
20 декабря 2008 в 16:27 (GMT+6)
случайно не на версию 2.6.5 пытаешься поставить? :-) это только для 2.7 и новее
20 декабря 2008 в 16:41 (GMT+6)
Конечно на 2.6.5., видела, что для 2.7. и выше. Выпрашива, выпрашивала, а как увидела
думала для меня, обрадовалась…Радость была преждевременной!
20 декабря 2008 в 16:43 (GMT+6)
Наталья, как обновлять 265 на 27 подробно вполне написано в ФАКе :) ниче там сложного нет. есть даже ссылка на то как одна читательница делала – может так более понятно :)
27 декабря 2010 в 21:45 (GMT+6)
Здравствуйте. Пользуюсь вашей сборкой (за неё спасибо Вам огромное).
Сейчас хотел обновить свой ворд пресс (на данный момент сборка 2.7.1 стоит).
Скачал этот плагин и активировал.
Но в пункте обновления стоит все же ссылка на офиц. сайт
в чем загвоздка? как мне сделать автоматическое обновление ?
12 января 2011 в 2:54 (GMT+6)
Здравствуйте, что это за ошибка такая:
Загрузка обновления с http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip
Загрузка не удалась.: Невозможно открыть обработку для fopen() в http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip
Установка не удалась
17 января 2011 в 13:05 (GMT+6)
Анатолий, т.к. файл отсутствует пока что на сервере…