Как автоматически обновлять 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 и новее) без вмешательств в ядро системы”

  1. ScorpAL 16 декабря 2008 в 14:28

    Отлично. Спасибо. Перенесу код из плагина в functions.php моей темы.

  2. ScorpAL 16 декабря 2008 в 14:30

    Хотя… если присутствует в ru_RU.php то плагин то ведь и не нужен…

  3. Lecactus 16 декабря 2008 в 14:34

    ScorpAL, ага. нафига переносить в код темы, если ру_ру.пхп автоматом подключается :) а плагин это «на всякий случай для комплекта»

  4. ScorpAL 16 декабря 2008 в 14:58

    Кактус, есть идея.

    Раз уж появился ru_RU.php то, мне кажется, было бы вполне логичным перенести в него русские даты от Макса.

    Так же было бы не плохо перенести туда же и rus to lat (ISO, но несколько подправить с учетом реалий и SEO).

    Что думаешь?

  5. ScorpAL 16 декабря 2008 в 15:01

    Один хрен, это можно сказать, чуть ли не обязательные дополнения для русского вордпресса.

  6. Lecactus 16 декабря 2008 в 15:03

    ну в общем раньше этот файл тоже у меня был — там подправлены стили админки для учета русских длинных слов.

    Раз уж появился ru_RU.php то, мне кажется, было бы вполне логичным перенести в него русские даты от Макса.

    да, можно, раньше этот файл тоже мог использоваться (в старых версиях вп до 2.2.3 от Антона был рус2лат туда подключен), но этими функциями не все пользуются.
    в общем это личное дело каждого.

    PS могу поставить голосование :)

  7. Lecactus 16 декабря 2008 в 15:05

    чуть ли не обязательные дополнения

    я согласен, но не все их используют + плагины не будут работать там если включен лайт перевод — появляется еще необходимость использовать ru_RU_lite.php … плагинами проще управлять. включил и пусть работает

  8. ScorpAL 16 декабря 2008 в 15:33

    c ru_RU_lite есть еще одна проблема.

    не забываем что в дефолтной теме присутствует код:

    <?php language_attributes(); ?>

    Который при включеннмо лайт переводе сгенерирует

    lang="ru-RU-lite"

    Что не есть стандартно.

    Мне кажется, нужно как-то пересмортеть подключение лайт перевода так что бы переменная $locale из l10n.php всегда оставалась как ru-RU. А вот файл перевода использовался бы уже в зависимости от того где находимся.

    Тем сама и плагины будут всегда думать именно про ru-RU, а не гоняться за виртуальным ru-RU-lite.

    Нужно хорошенько обдумать.

  9. ScorpAL 16 декабря 2008 в 15:51

    Например в файле 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);

  10. trouble2maker 16 декабря 2008 в 15:52

    упс! файлы загрузил, а не активируется. выдает:
    Плагин не может быть активирован, поскольку он вызвал фатальную ошибку
    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

  11. ScorpAL 16 декабря 2008 в 16:12

    упс! файлы загрузил, а не активируется. выдает:
    Плагин не может быть активирован, поскольку он вызвал фатальную ошибку
    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.

    Кактус. Инструкцию обнови. Мол нужно либо это либо это.

  12. Lecactus 16 декабря 2008 в 18:39

    ScorpAL, нафига такие извращения — вот это уже действительно непредсказуемо себя поведет. то что сделано сейчас это элементарно просто и надежно (и проверено было еще год назад Максимом) — то что мы называем «лайт-переводом» — это то что просто типа ДРУГОЙ язык подключается на морду сайта. т.е. админку можем иметь на русском, а морду на китайском и наоборот. и всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файла. у меня среди более 50 установленных плагинов это потребовало всего несколько файликов. а если делать как предложено выше то будет тоже самое что вообще ничего не делать.

  13. Lecactus 16 декабря 2008 в 18:41

    ScorpAL,

    Инструкцию обнови. Мол нужно либо это либо это.

    внимательный читатель ошибки не сделает. а то обычно скачают — жмут активировать, жалуются в комент а потом пишут что написано выше: а там написано:

    Плагин идет в комплекте, но активировать его не обязательно. он включен только для того чтобы можно было включить «обновления с моего сайта» при случайном удалении/повреждении/изменении ru_RU.php.

    вариант номер два — просто чтобы названия фунций были разные :)

  14. ScorpAL 16 декабря 2008 в 19:14

    всего лишь нужно для НЕКОТОРЫХ плагинов и тем создать копию языкового файла

    Скорее это извращение.

    А что именно используется из языковых файлов (и в каком случае) на морде сайта?

  15. Lecactus 16 декабря 2008 в 19:48

    ScorpAL, http://lecactus.ru/2008/11/15/3110/

    Пересмотрел я все плагины что у меня стоят и для перевода «лицевой» части блога потребовалось лишь скопировать несколько файлов имяплагина-ru_RU.mo в имяплагина-ru_RU_lite.mo, вообще бОльшая часть плагинов ведь переводится только в админ-части, поэтому и у вас получится всего несколько файлов отдельных переводов по 2–30кб.

    никакое это не извращение. это вообще можно сказать «недокументированная функция», которую пользователь использует по своему желанию. поэтому она у меня в дистрибутиве отключена. тем кто понимает что это и как использовать — это все делается(копии нужных файлов) за 5минут максимум и забывается. понять использует плагин перевод для морды сайта или нет легко — ставим плагин — если он без русификатора что то показывает на сайте по английски — значит лайт-файл нужен. если нет — нафиг. вот допустим у меня взять те самые «примерно 50 плагинов». из них к примеру перевод использует на морде 6штук. в сумме их переводы занимают около 50кбайт вместо 250кбайт общих. с одной стороны кажется пустяковые цифры — а когда оно используется полностью то за каждые 100кб кода перевода памяти кушает в среднем около 800кбайт.

    смотрим в том же посте по ссылке выше:
    Потребление памяти: 13.3MB — так у меня было с полными всеми переводами — это еще надо учитывать что у меня используется пхп-акселератор и без него цифра примерно в 3 раза выше.
    сейчас у меня с лайт-переводами морды — 6-7мбайт потребление и скорость загрузки страниц существенно выше.

    PS прекращаем оффтоп: если хочется продолжать — по ссылке выше http://lecactus.ru/2008/11/15/3110/ уже на 100коментов почти наговорено.

  16. Александр 16 декабря 2008 в 23:54

    автообновлялка — это гуд! сэнкс :)

  17. Наталья (Елена Дру) 17 декабря 2008 в 9:22

    Кактус, собралась обновляться, прочитала инструкцию, очень сложно — не умею делать бекап и скриншоты. Можно установить — эту функцию автообновления на версию 2.6.5., чтобы все само автоматически обновилось до версии 2.7.

  18. Lecactus 17 декабря 2008 в 9:52

    Наталья (Елена Дру), http://lecactus.ru/2008/12/11/3377/ тут я уже раза три отвечал подробно. вручную это делается за 10минут примерно

  19. Lecactus 17 декабря 2008 в 13:28

    прочитала инструкцию, очень сложно

    можно еще тут прочитать http://t-stile.blogspot.com/2008/12/wordpress-27.html — так сказать глазами рядового пользователя. может так более доступно написано?

  20. vadim 17 декабря 2008 в 13:43

    thx

  21. Елена Дру 19 декабря 2008 в 9:03

    Кактус, я немного зануда, но у меня стояли подписки на комментарии на твои версии, начиная с 2.6. Но подписка на комментарии о версии 2.7., это что-то, придеться отключить, не в состоянии все прочитать 20-30 писем в день. Столько людей мучаются, это ужас!

    вручную это делается за 10минут примерно

    — это наверно только для тебя. Может пожелеешь пободных мне?

  22. Lecactus 20 декабря 2008 в 1:40

    по просьбам обновил плагин который теперь можно активировать даже если уже код включен в ru_RU.php
    Дистрибутив обновил. Отдельно плагин можно скачать тут. добавлен реадми к плагину.

  23. Елена Дру 20 декабря 2008 в 9:23

    Кактус, огромное спасибо, что пошел на встречу. Закачала плагин, активировала, 2 раза. Приглашение обновиться исчезло. Все без изменений.
    Кстати в ридми написано автообновление без плагинов, а те, что стоят не исчезнут?

  24. Lecactus 20 декабря 2008 в 11:48

    Елена Дру, нет не исчезнут. имеется ввиду что в архиве который скачивается для обновления движка нет огромного набора плагинов. там идет сборка «normal»

  25. Наталья 20 декабря 2008 в 16:16

    Кактус, подскажи, пожалуйста, почему плагин не действует, обновления не происходит?

  26. Lecactus 20 декабря 2008 в 16:18

    Наталья, в комментариях выше я вроде писал про это :)

  27. Lecactus 20 декабря 2008 в 16:21

    Точнее в самой записи

  28. Lecactus 20 декабря 2008 в 16:27

    почему плагин не действует

    случайно не на версию 2.6.5 пытаешься поставить? :-) это только для 2.7 и новее

  29. Наталья 20 декабря 2008 в 16:41

    Конечно на 2.6.5., видела, что для 2.7. и выше. Выпрашива, выпрашивала, а как увидела

    по просьбам обновил плагин который теперь можно активировать даже

    думала для меня, обрадовалась…Радость была преждевременной!

  30. Lecactus 20 декабря 2008 в 16:43

    Наталья, как обновлять 265 на 27 подробно вполне написано в ФАКе :) ниче там сложного нет. есть даже ссылка на то как одна читательница делала — может так более понятно :)

  31. Анатолий 27 декабря 2010 в 21:45

    Здравствуйте. Пользуюсь вашей сборкой (за неё спасибо Вам огромное).

    Сейчас хотел обновить свой ворд пресс (на данный момент сборка 2.7.1 стоит).
    Скачал этот плагин и активировал.

    Но в пункте обновления стоит все же ссылка на офиц. сайт http://s008.radikal.ru/i303/1012/e8/620932463d8f.jpg

    в чем загвоздка? как мне сделать автоматическое обновление ?

  32. Анатолий 12 января 2011 в 2:54

    Здравствуйте, что это за ошибка такая:

    Загрузка обновления с http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip

    Загрузка не удалась.: Невозможно открыть обработку для fopen() в http://lecactus.ru/download/wordpress-3.0.4-ru_RU.zip

    Установка не удалась

  33. Lecactus 17 января 2011 в 13:05

    Анатолий, т.к. файл отсутствует пока что на сервере…

  34. Мариан 7 июля 2012 в 11:14

    Здравствуйте.

    После всех манипуляции появляется вот такая ошибка:

    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

    Подскажите в чем проблема?

  35. Sergey Biryukov 8 июля 2012 в 19:55

    Мариан, такая ошибка замечена при использовании плагина PopUp Domination. Если он у вас используется, посмотрите тему «WP 3.3 и плагин PopUp Domination» (в версии 3.3 сообщение было другим, но суть проблемы та же).

  36. Сергей 16 апреля 2014 в 12:10

    Здравствуйте! Скажите пожалуйста а этот плагин актуален для wordpress 3.8.2 ?

  37. Lecactus 16 апреля 2014 в 13:15

    Сергей, замените файл как описано здесь http://lecactus.ru/2014/04/10/6521/#comment-143659 или поставьте http://lecactus.ru/download/restore-automatic-update-lecactus_v38x.zip обновленную версию плагина. PS WP 3.8.3 будет доступен к загрузке сегодня вечером

Трэкбеки и пингбеки

  1. Как автоматически обновлять WordPress 2.7 и выше моей сборки с моего сайта - Lecactus Home