Как работать с WordPress на localhost
Я запускаю сайт на WordPress на своем ноутбуке, используя localhost, и мне часто нужно, чтобы коллеги могли его видеть. Если они вводят IP моего дома, они могли получить доступ к сайту, но все URL в WordPress, которые использовали site_url() или подобные функции, выводили "localhost", что, конечно, не работало для внешних пользователей.
Поэтому я изменил WordPress, чтобы он использовал мой IP в качестве URL сайта, что решило эту проблему, но создало другую. Если я ухожу с ноутбуком из дома и пытаюсь просмотреть свой сайт, все ссылки теперь отображаются как http://home-ip/, который недоступен. Более того, я не могу войти в wp-admin, чтобы изменить URL сайта обратно на localhost, так как меня перенаправляет на http://home-ip/site/wp-admin/.
Есть ли способ решить эту проблему без постоянного изменения URL каждый раз, когда я хочу, чтобы кто-то получил доступ к нему извне, или каждый раз, когда я ухожу из дома.
Вы можете использовать файл wp-config.php
для изменения URL сайта в зависимости от того, откуда осуществляется доступ, используя переменную $_SERVER['REMOTE_ADDR']
. У меня это выглядит примерно так:
if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1' || $_SERVER['REMOTE_ADDR'] == '::1') {
// доступ к сайту с локального сервера
define('WP_SITEURL', 'http://localhost/mysite/');
define('WP_HOME', 'http://localhost/mysite');
} else if (strpos($_SERVER['REMOTE_ADDR'],'192.168.0.') !== false) {
// доступ к сайту с другой машины в домашней сети,
// все их (внутренние) сетевые адреса начинаются с этого числа;
// следующая строка указывает внутренний сетевой адрес сервера
define('WP_SITEURL', 'http://192.168.0.192/mysite/');
define('WP_HOME', 'http://192.168.0.192/mysite');
} else { // доступ к сайту извне домашней сети
define('WP_SITEURL', 'http://89.*.*.*/mysite/'); // замените на ваш внешний IP-адрес
define('WP_HOME', 'http://89.*.*.*/mysite');
}
//error_log("Siteurl is ".WP_SITEURL);
Этот метод также значительно упрощает загрузку сайта на продакшен-сервер или поддержание синхронизации между локальной и продакшен версиями сайта. (Хотя, очевидно, в wp-config.php
на продакшен-сервере этот код быть не должен.)
Примечание: По какой-то причине я не могу использовать свой внешний домашний IP-адрес с других машин в моей домашней сети; если у вас не так, вы можете удалить часть с else if
, оставив только блок else
.

Спасибо, это сработало для меня. Однако мне пришлось добавить || $_SERVER['REMOTE_ADDR'] == '::1'

Хотя принятый ответ выглядит хорошим решением, простое изменение WP_SITEURL/WP_HOME не сработало в моем случае, потому что в текстовом содержимом страниц всегда оставалось множество абсолютных ссылок (например, изображения или ссылки, добавленные через WYSIWYG-редактор). Другими словами, мне практически пришлось использовать тот же домен, чтобы сайт работал корректно.
Поэтому, если это поможет кому-то еще, кто столкнулся с этой проблемой, мое решение оказалось вне WordPress — хотя оно может подойти не во всех случаях.
Я использую домен, например me.mycompany.com, а затем в своем файле HOSTS указываю его разрешение на 127.0.0.1 (то есть локальный хост). Для коллег, которым нужно просматривать сайт, я добавляю этот домен в их файл HOSTS с указанием моего локального IP-адреса.
Это решение также можно расширить, когда клиентам за пределами нашей сети нужно просматривать сайт: мы просто убеждаемся, что me.mycompany.com разрешается на наш публичный IP-адрес (обычно ваш веб-хостинг может помочь с этим, и это определенно упрощается, если у вас есть статический IP-адрес для интернет-подключения), а затем на нашем роутере перенаправляем веб-запросы на мой внутренний IP, фактически создавая простую систему веб-хостинга (только для разработки, конечно, а не для продакшена!).
Надеюсь, это поможет кому-то. Файл HOSTS можно редактировать на любой платформе, очевидно, инструкции различаются для Windows, Mac и Linux, поэтому лучше погуглить, если вам нужна помощь. В Windows файл находится по пути C:\Windows\System32\drivers\etc\hosts — откройте его в Блокноте и внесите необходимые изменения, следуя формату файла (вам потребуется запустить Блокнот от имени администратора, чтобы сохранить изменения).

Начиная с WordPress 5.5.1 вы можете использовать функцию wp_get_environment_type. Установите wp_get_environment_type
в файле wp-config.
