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

Страницы: [1] 2 » Show All

  1. 1 ScorpAL 16 декабря 2008 в 14:28 (GMT+6)

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


  2. 2 ScorpAL 16 декабря 2008 в 14:30 (GMT+6)

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


  3. 3 Lecactus 16 декабря 2008 в 14:34 (GMT+6)

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


  4. 4 ScorpAL 16 декабря 2008 в 14:58 (GMT+6)

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

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

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

    Что думаешь?


  5. 5 ScorpAL 16 декабря 2008 в 15:01 (GMT+6)

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


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

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

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

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

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


  7. 7 Lecactus 16 декабря 2008 в 15:05 (GMT+6)

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

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


  8. 8 ScorpAL 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.

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


  9. 9 ScorpAL 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);


  10. 10 trouble2maker 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


  11. 11 ScorpAL 16 декабря 2008 в 16:12 (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

    Отлкюлчи плагин. Вошибке ведь ясно написано что плагин просто не может изменить то что уже изменено файлом ru_RU.php.

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


  12. 12 Lecactus 16 декабря 2008 в 18:39 (GMT+6)

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


  13. 13 Lecactus 16 декабря 2008 в 18:41 (GMT+6)

    ScorpAL,

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

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

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

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


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

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

Страницы: [1] 2 » Show All

Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии выше и FAQ! Прежде чем задавать вопрос, прочитайте это. Научитесь ценить чужое время!

 Имя (обязательно)  EMAIL (обязательно)  АДРЕС ЛИЧНОГО БЛОГА

Вы соглашаетесь с правилами


При добавлении HTML|CSS|JS|PHP кода в комментарий, оформляйте его через кнопку КОД

 

Получать комментарии по RSS Адрес трэкбека