Kalium понял это правильно - пути в интерфейсе WordPress являются относительными, поэтому интерфейс администратора не работает должным образом при доступе таким способом.
Ваш подход касается нескольких аспектов, поэтому я хотел бы дать несколько быстрых рекомендаций.
Во-первых, я бы попытался найти способ убрать переменные $username
и $password
из жесткого кодирования. Подумайте о том, как легко это сломать - например, если пароль обновляется через интерфейс администрирования, жестко заданное значение в вашем коде больше не будет правильным, и ваш «автоматический вход» теперь не удастся. Кроме того, если кто-то каким-то образом включает сайт и получает доступ к handshake.php
- ну, теперь у него есть имя пользователя и пароль для вашего блога.
Похоже, что ваша установка WordPress покоится на том же сервере, что и скрипт рукопожатия, который вы написали, учитывая, что путь к /blog
является относительным (в вашем примере кода). Соответственно, я бы посоветовал имитировать сеанс, который они проверяют при входе в родительские приложения. Я делал это несколько раз в прошлом - просто не могу вспомнить конкретику. Так, например, ваш сценарий входа в систему не только установит ваши учетные данные для входа, но также установит ключи сеанса, необходимые для аутентификации WordPress.
Этот процесс будет включать в себя копание большого количества кода WordPress, но в этом вся прелесть открытого исходного кода! Вместо использования значений cURL и жесткого кодирования попробуйте просто интегрировать механизм аутентификации WordPress в механизм входа в приложение. Я бы начал с того, что посмотрел на источник для wp-login.php
и пошел оттуда.
Если ничего не помогло, и вы решили не пытаться объединить механизм аутентификации сеанса с механизмом WordPress, то вы могли бы немедленно решить вашу проблему (не исправляя более важные аспекты вашего подхода) с этими изменениями в коде. :
Сначала добавьте следующий curl_opt:
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); // Enables session support
Затем добавьте это после закрытия обработчика cURL:
curl_close($ch);
// Instead of echoing the result, redirect to the administration interface, now that the valid, authenticated session has been established
header('location: blog/wordpress/wp-admin/');
die();
Итак, в этом далеко не идеальном решении вы будете использовать cURL для аутентификации пользователя, а затем вместо попытки перехватить интерфейс администрирования на текущей странице, перенаправить их на обычный интерфейс администрирования.
Надеюсь, это поможет! Дайте мне знать, если вам нужна дополнительная помощь / решение не ясно.