Иногда встречаются ситуации, когда приложению нужно использовать функциональность, встроенную в WordPress, но при этом по ряду причин не хочется подключать установленные плагины. Типичным примером может являться скрипт, запускаемый cron'ом и, например, рассылающий письма подписавшимся на рассылку пользователям.

Обычно, если нужно подключить WordPress к приложению, поступают так:

[-]
View Code PHP
<?php
    require_once(WORDPRESS_DIR . '/wp-config.php');
?>

После этого приложению становятся доступны все функции/переменные WordPress. Тем не менее, у этого подхода есть недостаток: он подключает все активные плагины. Плохо это может быть тем, что каждый плагин может иметь порядочную (в смысле потребляемых ресурсов) инициализационную секцию: например, цена подключения плагина Simple Forum может быть 70 лишних запросов к базе данных.

Разберёмся, из-за чего это происходит (я буду рассказывать на примере WordPress 2.6, но это также относится — с точностью до номеров строк — к WordPress младших версий).

Итак, когда мы подключаем wp-config.php, в нём определяются всякие константы, после чего управление передаётся файлу wp-settings.php:

[-]
View Code PHP
  1. /* That's all, stop editing! Happy blogging. */
  2.  
  3. if ( !defined('ABSPATH') )
  4.         define('ABSPATH', dirname(__FILE__) . '/');
  5. require_once(ABSPATH . 'wp-settings.php');

Файл wp-settings.php определяет кучу разных констант, подключает различные модули WordPress, инициализирует глобальные переменные и активирует плагины.

Нам сейчас интересна именно активация плагинов:

[-]
View Code PHP
  1. // Check for hacks file if the option is enabled
  2. if (get_option('hack_file')) {
  3.         if (file_exists(ABSPATH . 'my-hacks.php'))
  4.                 require(ABSPATH . 'my-hacks.php');
  5. }
  6.  
  7. if ( get_option('active_plugins') ) {
  8.         $current_plugins = get_option('active_plugins');
  9.         if ( is_array($current_plugins) ) {
  10.                 foreach ($current_plugins as $plugin) {
  11.                         if ( '' != $plugin && 0 == validate_file($plugin) && file_exists(WP_PLUGIN_DIR . '/' . $plugin) )
  12.                                 include_once(WP_PLUGIN_DIR . '/' . $plugin);
  13.                 }
  14.         }
  15. }
  16.  
  17. require (ABSPATH . WPINC . '/pluggable.php');

Иными словами, сначала подключается my-hacks.php, если это разрешено настройками, затем подключаются все активные плагины и в самом конце подключается pluggable.php.

Фактически, если поддержка my-hacks.php отключена, то у нас нет возможности отредактировать результат вызова get_option('active_plugins'); (я осознанно не предлагаю редактировать исходный код WordPress, ибо, как показывает практика, ничего, кроме головной боли при обновлении из этого не выходит).

В любом случае, my-hacks.php объявлен устаревшим (deprecated), поэтому полагаться на него будет нехорошо (ибо вполне вероятно, что в версии 2.7 его не будет).

Ключом к решению проблемы является следующее условие: file_exists(WP_PLUGIN_DIR . '/' . $plugin). Как я уже писал в статье "Известные и не очень настройки WordPress", эту константу можно переопределить. Отмечу, что в ветке 2.5 вместо WP_PLUGIN_DIR нужно использовать PLUGINDIR (а в 2.6, если требуется обратная совместимость, определять нужно обе константы).

Переходим к окончательному решению. Создаём папку wp-content/plugins2, в неё помещаем символические ссылки на нужные скрипту плагины (если таковых нет, то ничего страшного). Подключение WordPress к приложению будет осуществляться так:

[-]
View Code PHP
    define('WP_PATH', 'path/to/wordpress');
    define('WP_PLUGIN_DIR', WP_PATH . '/wp-content/plugins2');
    define('PLUGINDIR', 'wp-content/plugins2');
//Если есть острая необходимость, для 2.6 можно определить WP_PLUGIN_URL
//WP_URL . '/wp-content/plugins2'

    require_once(WP_PATH . '/wp-config.php');

Всё просто! :-)

Добавить в закладки
  • del.ici.ous
  • Digg
  • Furl
  • Google
  • Simpy
  • Spurl
  • Y! MyWeb
  • БобрДобр
  • Мистер Вонг
  • Яндекс.Закладки
  • Текст 2.0
  • News2
  • AddScoop
  • RuSpace
  • RUmarkz
  • Memori
  • Закладки Google
  • Писали
  • СМИ 2
  • Моё Место
  • Сто Закладок
  • Ваау!
  • Technorati
  • RuCity
  • LinkStore
  • NewsLand
  • Lopas
  • Закладки - I.UA
  • Connotea
  • Bibsonomy
  • Trucking Bookmarks
  • Communizm
  • UCA

Связанные записи

22
Авг
2008

Комментарии к статье «Использование движка WordPress без плагинов из стороннего приложения»  »

К статье «Использование движка WordPress без плагинов из стороннего приложения» комментариев пока нет. Не хотите ли стать первым?

Подписаться на RSS-ленту комментариев к статье «Использование движка WordPress без плагинов из стороннего приложения» Trackback URL: http://blog.sjinks.org.ua/wordpress/319-using-wordpress-without-plugins-from-third-party-application/trackback/

Оставить комментарий к записи «Использование движка WordPress без плагинов из стороннего приложения»

Вы можете использовать данные тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Оставляя комментарий, Вы выражаете своё согласие с Правилами комментирования.

Подписаться, не комментируя