Добавление поддержки HTTPS в WordPress

Ходят слухи, что гугл поднимает сайты с поддержкой HTTPS повыше в поисковой выдаче. Кроме того, добавление SSL сертификата повысит безопасность сайта в целом. Тем более, что помимо StartSSL и WoSign бесплатные сертификаты совсем скоро начнет выдавать Let’s Encrypt.

WordPress по умолчанию хранит все ссылки с добавлением протокола, поэтому для полноценной поддержки необходимо внести изменения в базу данных. При этом следует учесть, что чтобы не сломать HTTP, можно перейти на относительные ссылки внутри сайта вместо абсолютных. Для этого в консоли mysql делаем для БД блога замену в таблице wp_posts (если используются плагины подмены имен таблиц, название нужно заменить на своё корректное):

mysql> use wordpress;
mysql> UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://DOMAIN.COM/', '/');

Здесь и далее DOMAIN.COM нужно заменить на адрес сайта, где расположен WordPress. В основных настройках админки блога есть возможность указать базовую ссылку. Она тоже должна быть в формате с протоколом. Как быть, если требуется поддержка обоих? Идём в wp-config.php и городим там велосипед:

function isSecure() {
    return
        (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
        || $_SERVER['SERVER_PORT'] == 443;
    }

$web_site_url = 'DOMAIN.COM';

if (isSecure())
{
     define('WP_HOME',   'https://' . $web_site_url);
     define('WP_SITEURL','https://' . $web_site_url);
}
else
{
     define('WP_HOME',   'http://' . $web_site_url);
     define('WP_SITEURL','http://' . $web_site_url);
}

По желанию добавляем обязательное использование HTTPS при логине и/или пользовании админкой:

define( 'FORCE_SSL_LOGIN', true );
define( 'FORCE_SSL_ADMIN', true );

Ссылки: