Как автоматически обновлять 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% «оригинальное ядро» и все изменения сделаны через внешние функции, как это хотели видеть некоторые пользователи.
Связанные записи
38 комментариев на запись “Как автоматически обновлять WordPress Lecactus Edition (версия 2.7 и новее) без вмешательств в ядро системы”
Трэкбеки и пингбеки
Отлично. Спасибо. Перенесу код из плагина в functions.php моей темы.
Хотя… если присутствует в ru_RU.php то плагин то ведь и не нужен…
ScorpAL, ага. нафига переносить в код темы, если ру_ру.пхп автоматом подключается :) а плагин это «на всякий случай для комплекта»
Кактус, есть идея.
Раз уж появился ru_RU.php то, мне кажется, было бы вполне логичным перенести в него русские даты от Макса.
Так же было бы не плохо перенести туда же и rus to lat (ISO, но несколько подправить с учетом реалий и SEO).
Что думаешь?
Один хрен, это можно сказать, чуть ли не обязательные дополнения для русского вордпресса.
ну в общем раньше этот файл тоже у меня был — там подправлены стили админки для учета русских длинных слов.
да, можно, раньше этот файл тоже мог использоваться (в старых версиях вп до 2.2.3 от Антона был рус2лат туда подключен), но этими функциями не все пользуются.
в общем это личное дело каждого.
PS могу поставить голосование :)
я согласен, но не все их используют + плагины не будут работать там если включен лайт перевод — появляется еще необходимость использовать ru_RU_lite.php … плагинами проще управлять. включил и пусть работает
c ru_RU_lite есть еще одна проблема.
не забываем что в дефолтной теме присутствует код:
<?php language_attributes(); ?>
Который при включеннмо лайт переводе сгенерирует
lang="ru-RU-lite"
Что не есть стандартно.
Мне кажется, нужно как-то пересмортеть подключение лайт перевода так что бы переменная $locale из l10n.php всегда оставалась как ru-RU. А вот файл перевода использовался бы уже в зависимости от того где находимся.
Тем сама и плагины будут всегда думать именно про ru-RU, а не гоняться за виртуальным ru-RU-lite.
Нужно хорошенько обдумать.
Например в файле 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);
упс! файлы загрузил, а не активируется. выдает:
Плагин не может быть активирован, поскольку он вызвал фатальную ошибку
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
Отлкюлчи плагин. Вошибке ведь ясно написано что плагин просто не может изменить то что уже изменено файлом ru_RU.php.
Кактус. Инструкцию обнови. Мол нужно либо это либо это.
ScorpAL, нафига такие извращения — вот это уже действительно непредсказуемо себя поведет. то что сделано сейчас это элементарно просто и надежно (и проверено было еще год назад Максимом) — то что мы называем «лайт-переводом» — это то что просто типа ДРУГОЙ язык подключается на морду сайта. т.е. админку можем иметь на русском, а морду на китайском и наоборот. и всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файла. у меня среди более 50 установленных плагинов это потребовало всего несколько файликов. а если делать как предложено выше то будет тоже самое что вообще ничего не делать.
ScorpAL,
внимательный читатель ошибки не сделает. а то обычно скачают — жмут активировать, жалуются в комент а потом пишут что написано выше: а там написано:
вариант номер два — просто чтобы названия фунций были разные :)
всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файла
Скорее это извращение.
А что именно используется из языковых файлов (и в каком случае) на морде сайта?
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коментов почти наговорено.
автообновлялка — это гуд! сэнкс :)
Кактус, собралась обновляться, прочитала инструкцию, очень сложно — не умею делать бекап и скриншоты. Можно установить — эту функцию автообновления на версию 2.6.5., чтобы все само автоматически обновилось до версии 2.7.
Наталья (Елена Дру), http://lecactus.ru/2008/12/11/3377/ тут я уже раза три отвечал подробно. вручную это делается за 10минут примерно
можно еще тут прочитатьhttp://t-stile.blogspot.com/2008/12/wordpress-27.html — так сказать глазами рядового пользователя. может так более доступно написано?
thx
Кактус, я немного зануда, но у меня стояли подписки на комментарии на твои версии, начиная с 2.6. Но подписка на комментарии о версии 2.7., это что-то, придеться отключить, не в состоянии все прочитать 20-30 писем в день. Столько людей мучаются, это ужас!
— это наверно только для тебя. Может пожелеешь пободных мне?
по просьбам обновил плагин который теперь можно активировать даже если уже код включен в ru_RU.php
Дистрибутив обновил. Отдельно плагин можно скачать тут. добавлен реадми к плагину.
Кактус, огромное спасибо, что пошел на встречу. Закачала плагин, активировала, 2 раза. Приглашение обновиться исчезло. Все без изменений.
Кстати в ридми написано автообновление без плагинов, а те, что стоят не исчезнут?
Елена Дру, нет не исчезнут. имеется ввиду что в архиве который скачивается для обновления движка нет огромного набора плагинов. там идет сборка «normal»
Кактус, подскажи, пожалуйста, почему плагин не действует, обновления не происходит?
Наталья, в комментариях выше я вроде писал про это :)
Точнее в самой записи
случайно не на версию 2.6.5 пытаешься поставить? :-) это только для 2.7 и новее
Конечно на 2.6.5., видела, что для 2.7. и выше. Выпрашива, выпрашивала, а как увидела
думала для меня, обрадовалась…Радость была преждевременной!
Наталья, как обновлять 265 на 27 подробно вполне написано в ФАКе :) ниче там сложного нет. есть даже ссылка на то как одна читательница делала — может так более понятно :)
Здравствуйте. Пользуюсь вашей сборкой (за неё спасибо Вам огромное).
Сейчас хотел обновить свой ворд пресс (на данный момент сборка 2.7.1 стоит).
Скачал этот плагин и активировал.
Но в пункте обновления стоит все же ссылка на офиц. сайтhttp://s008.radikal.ru/i303/1012/e8/620932463d8f.jpg
в чем загвоздка? как мне сделать автоматическое обновление ?
Здравствуйте, что это за ошибка такая:
Загрузка обновления с http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip
Загрузка не удалась.: Невозможно открыть обработку для fopen() в http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip
Установка не удалась
Анатолий, т.к. файл отсутствует пока что на сервере…
Здравствуйте.
После всех манипуляции появляется вот такая ошибка:
Warning: Cannot modify header information — headers already sent by (output started at X:\home\localhost\www\localblog\wp-includes\general-template.php:2099) in X:\home\localhost\www\localblog\wp-includes\pluggable.php on line 881
Подскажите в чем проблема?
Мариан, такая ошибка замечена при использовании плагина PopUp Domination. Если он у вас используется, посмотрите тему«WP 3.3 и плагин PopUp Domination» (в версии 3.3 сообщение было другим, но суть проблемы та же).
Здравствуйте! Скажите пожалуйста а этот плагин актуален для wordpress 3.8.2 ?
Сергей, замените файл как описано здесь http://lecactus.ru/2014/04/10/6521/#comment-143659 или поставьте http://lecactus.ru/download/restore-automatic-update-lecactus_v38x.zip обновленную версию плагина. PS WP 3.8.3 будет доступен к загрузке сегодня вечером