Загрузите минимальную среду WordPress

12

Я сделал свой собственный сервис загрузки для своего сайта, который отделен от WP, но использует WP для обеспечения функций низкоуровневой базы данных и проверки пользователя. Для этого я включаю wp-load.php в свой основной скрипт (Uploadify), но при этом кажется, что он наполняет память сервера ненужными компонентами. Благодаря этому я вижу ошибку в моем скрипте, которая указывает на установленный плагин WP.

Как я могу загрузить только основные компоненты WP и игнорировать плагины? Это вообще возможно?

MechEngineer
источник
1
Проверьте BackPress .
soulseekah

Ответы:

9

Полное отключение плагинов означает, что вы потеряете много преимуществ.

Существуют дистрибутивы WordPress, которые идут дальше и вырывают посты, ссылки и т. Д., Но они всегда будут отставать от ядра WordPress и, как правило, не выживают так долго.

Вот некоторые вещи, которые можно сделать

Короткая инициатива

Поместив это в ваш wp-config.php:

define( 'SHORTINIT', TRUE );

Или определение его где-то перед загрузкой в ​​WordPress, должно уменьшить процесс загрузки и вернуть его к минимальным основным функциям.

Вторичные легкие установки

Установите вторую установку WordPress, используя только те плагины и темы, которые вы хотите (если есть). Затем настройте wp-config.php, чтобы использовать один и тот же каталог wp-content и значения базы данных.

Backpress

WordPress, оригинальный BBpress и glotpress, помимо прочего, построены вокруг библиотеки BackPress. Вы можете использовать это вместо WordPress для выполнения своей работы, хотя многие API и функции могут отсутствовать или нуждаются в повторной реализации / портировании

Варианты таблиц

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

Выход рано

Вы также можете попробовать подключиться к более ранним функциям в процессе загрузки WordPress и выйти из процесса PHP до завершения WordPress, но я не могу посоветовать, насколько это безопасно.

Выборочная загрузка плагинов

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

Том Дж Новелл
источник
+1 Вы когда-нибудь пробовали "Вторичные легкие установки" ?
Кайзер
Я делал подобные вещи, хотя никогда не для этой цели, большинство вариантов использования было бы лучше обслуживать мультисайты. В основном я использую его, чтобы можно было запустить установку для разработки, чтобы они обменивались контентом
Tom J Nowell
8

Используйте BackPress , но у меня есть небольшие разработки, где я использую установку по умолчанию и меньший источник через const.

увидеть на wp-settings.php

// Stop most of WordPress from being loaded if we just want the basics.
if ( SHORTINIT )
    return false;

Установите const SHORTINIT на true в wp-config.phpи посмотрите быстрый бег. define( 'SHORTINIT', TRUE );

Это файлы, которые вы получаете:

// All are located in ABSPATH.WPINC
'/load.php'
'/default-constants.php'
'/version.php'
'/compat.php'
'/functions.php'
'/class-wp.php'
'/class-wp-error.php'
'/plugin.php'
'/default-filters.php'
'/pomo/mo.php'

// Only Multisite
'/ms-blogs.php'
'/ms-settings.php'
bueltge
источник
6

Для создания is_user_logged_in()и current_user_can()работы я нашел подобный ответ здесь (не могу комментировать) Сравнение соответствует ответам здесь, как:

Использование define('SHORTINIT', true)+ require('wp-load.php')+ вручную включает в себя:

Загрузка страницы: 1,05 сек - включены файлы: 43 файла

Сравнение: используя ТОЛЬКО require('wp-load.php') :

Загрузка страницы: 1,35 сек - включены файлы: 419 файлов

Разница во времени (0,3 сек) может отличаться от установок и PHP-движков, но при проверке большого количества запросов на одной загрузке страницы - все это складывается! / @ Анна Эриксон

Хорошей идеей было использовать относительный вызов WP установленного каталога. Из пользовательского плагина Wordpress "ROOT" вроде:

$wordpress = '../../../wp-load.php';

Тогда внутри моего плагина index.php:

define('SHORTINIT', true);
include_once $wordpress;

require_once ( ABSPATH . WPINC . '/class-wp-user.php' );
require_once ( ABSPATH . WPINC . '/class-wp-roles.php' );
require_once ( ABSPATH . WPINC . '/class-wp-role.php' );
require_once ( ABSPATH . WPINC . '/class-wp-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php' );
require_once ( ABSPATH . WPINC . '/formatting.php' );
require_once ( ABSPATH . WPINC . '/capabilities.php' );
//require_once ( ABSPATH . WPINC . '/query.php' ); // - might be useful
require_once ( ABSPATH . WPINC . '/user.php' );
require_once ( ABSPATH . WPINC . '/meta.php' );

wp_cookie_constants();

require_once ( ABSPATH . WPINC . '/vars.php' );
require_once ( ABSPATH . WPINC . '/kses.php' );
require_once ( ABSPATH . WPINC . '/rest-api.php' );
require_once ( ABSPATH . WPINC . '/pluggable.php' );

После этого у меня работает проверка пользователей. Спасибо @Anna Ericson последним словам из оригинального кода:

Для другой задачи, выполняемой по одному или двум запросам, отслеживание других необходимых файлов может не стоить 0,3 сек . Пропустить SHORTINIT постоянную и вручную загромождать.

cavameta
источник
1
Это самый чистый путь до сих пор. Хорошо работает на ajax-звонках, загружая ограниченные образы на нашей установке.
Джонас Лундман
@cavameta Как импортировать Woocommerce в вок с помощью SHORTINIT?
webmastx
2

Ты пробовал define('SHORTINIT', true);? Я не тестировал его сам, но, похоже, он загружает очень мало аспектов ядра WP, сохраняя при этом достаточную функциональность, особенно если вам нужно только иметь дело с базой данных.

Томас Бутелер
источник