Если бы мне пришлось это сделать, я бы использовал свой собственный файл cookie для определения имени входа и загружал WordPress только для проверки при необходимости.
Файл cookie wordpress_logged_in_ {some-hash} может использоваться для определения пользователя, а WordPress использует его для определения того же самого. Вы не можете легко переопределить это, но вы можете использовать его без загрузки WordPress на несколько запросов.
Например, вот мой хэш cookie (полностью скомпонованный, но реалистичный):
key: wordpress_logged_in_1234567890abcdef1234567890abcdef
value: admin|1234567890|abcdef1234567890abcdef1234567890
То, как WordPress знает, как этот файл cookie действителен, не имеет значения, все, что вам нужно знать, это то, действителен ли он один раз, а затем вы подпишите его секретом.
Итак, впервые пользователь еще не доказал. Вы загружаете wp-load.php, а WP проверяет cookie и регистрирует пользователя. Теперь вы делаете все, что делаете, чтобы доказать себе, что пользователь вошел в систему, затем вы устанавливаете свой собственный cookie. Ключом может быть что угодно, значение, которое вы вводите в дайджест сообщения с секретным ключом с помощью функции hash_hmac.
$key = ... // the key from the WP cookie
$value = ... // the value from the WP cookie
$hash = hash_hmac ( 'md5' , $key.$value , 'some secret key' );
Вы получите обратно тарабарщину, которую вы отправите обратно с помощью setcookie (). При будущих запросах они отправят вам этот файл cookie. Вы можете сначала проверить это и проверить его, используя ту же хеш-функцию и секретный ключ.
Только вы можете генерировать хэш, потому что только вы знаете секретный ключ. Поэтому, если они отправляют обратно действительный хеш, который также совпадает с тем, что они отправляют для своих файлов cookie WP, то вы знаете, что они были проверены с помощью WP, через ваш код и ранее, и вы можете получить имя пользователя прямо из этого значения (это первое часть печенья, очевидно). Тогда вам не нужно загружать WP.
Кстати, секретный ключ должен быть длинным и случайным . Не короткий пароль. Не словарное слово. Просто большой бессмысленный бред. Шум в линии и многое другое. Пример ключа:
'GHY5hFNqq4Ntdu=3:SUp8#/+_W!- @@^@xslN*L|N+Vn;(1xo8jNyp,au$v9Ki5*'
Для Wordpress 4.9: Как я не могу комментировать (новый пользователь). Окончательный вариант (одиночная установка WP), который я использую для создания
is_user_logged_in()
иcurrent_user_can()
работы, описан ниже. Мыrequire('wp-load.php')
первый (пропустить WP () в грузоподъемного блог-header.php) , и получитьABSPATH
постоянную затем вручную включает в себя точно все необходимые вещи.Использование
define('SHORTINIT', true)
+require('wp-load.php')
+ вручную включает в себя:Загрузка страницы: 1,05 сек - включены файлы: 43 файла
Сравнение: используя ТОЛЬКО
require('wp-load.php')
:Загрузка страницы: 1,35 сек - включены файлы: 419 файлов
Разница во времени (0,3 сек) может отличаться от установок и PHP-движков, но при проверке большого количества запросов на одной загрузке страницы - все это складывается!
Не забудьте использовать относительный вызов WP установленного каталога. Из директории пользовательских плагинов Wordpress, внутри одного уровня поддиректории, при обычной установке путь должен выглядеть следующим образом:
Затем:
После этого проверка пользователя становится доступной. Для другой задачи, при выполнении одного или двух запросов , отслеживание других необходимых файлов может не стоить 0.3 сек. Пропустить
SHORTINIT
постоянную и вручную загромождать.источник
Только Wordpress включен или выключен. Иногда, но это только случайно, а не по замыслу, вы можете обойти это. Но в твоем случае я не совсем уверен, возможно ли это.
Вместо того,
wp-blog-header.php
чтобы пытаться загрузить только функции WP, включитеwp-load.php
вместо этого. Может быть, это помогает.источник
wp-blog-header.php
в основном загружается,wp-load.php
поэтому нет различий ...wp();
что на самом деле довольно дорого.wp-load.php
вместоwp-blog-header.php
, кажется, все работает нормально, но время загрузки такое же.Вы можете попытаться получить доступ к таблице напрямую. Если вы знаете суть файлов паролей, вы можете заставить их войти через вашу собственную систему, подсчитать пароль самостоятельно (посмотрите, как это делает Wordpress) и отслеживать их самостоятельно. Если вам нужна возможность перемещаться между вашей собственной системой и WordPress без повторной аутентификации, вы можете создать плагин для WordPress, который передает текущий сеанс пользователей в вашу систему.
источник
Самое быстрое, что вы можете получить с WP - это создание пользовательской оболочки, которая будет определять
SHORTINIT
и загружать ядро. Это остановит загрузку ядра сразу после подключения базы данных и до обработки большинства API и расширений (темы и плагинов).Оттуда вы можете попытаться получить доступ к базе данных самостоятельно или выборочно загрузить части ядра, которые вам нужны.
Это довольно грязный подход, но он так же близок к меньшей загрузке ядра, как в WP.
источник
Кажется, об этом уже шла дискуссия. Итак, проверьте обновления по адресу: https://core.trac.wordpress.org/ticket/37584
источник
Если вы просто хотите разрешить всем пользователям Wordpress использовать веб-приложение, вы можете использовать систему управления пользователями Wordpress и просто проверить, вошел ли пользователь в систему или нет.
Чтобы проверить это, вам нужно проверить, присутствует ли указанный файл cookie
wordpress_logged_in_{some-hash}
. Если нет, перенаправьте пользователя на страницу входа в Wordpress.{some-hash}
Часть названия печенья просто набор букв и цифр.источник