Wordpress: srcset получает HTTP вместо HTTPS во всех сообщениях
В Wordpress 4.4 изображения автоматически получают srcset
атрибут Моя проблема с этим заключалась в следующем (я решил ее, пока писал этот вопрос, см. Мой ответ ниже):
- для того, чтобы передать все в https, я заменил все
src="http://...
ссылки в таблице сообщенийsrc="https://...
(Я изменил это позжеsrc="//...
для поддержки обоих протоколов); - изображения на всех сообщениях получают правильный URL в
src
атрибутов; - Однако во всех изображениях, которые получают
srcset
атрибуты URL в нем всегда сhttp://
Рекомендации.
Почему это происходит? Почему эти URL не обновляются? https://
начала?
2 ответа
Если вы не хотите менять свой адрес WordPress (URL) на https, просто поместите этот код в файл functions.php активной темы.
function codextent_ssl_srcset( $sources ) {
foreach ( $sources as &$source ) {
$source['url'] = set_url_scheme( $source['url'], 'https' );
}
return $sources;
}
add_filter( 'wp_calculate_image_srcset', 'codextent_ssl_srcset' );
** Также добавьте это в верхнюю строку файла wp-config.php.
$_SERVER['HTTPS'] = 'on';
Измените следующие настройки в админ под Настройки-> Общие:
Адрес WordPress (URL): https://yoursitename.com/ Адрес сайта (URL): https://yoursitename.com/
И нажмите кнопку [Сохранить изменения]. Наконец обновите страницу, и ваше изображение будет отображаться в вашем браузере с правильным атрибутом srcset.
После поиска некоторое время в wp-includes
папка, wp_calculate_image_srcset
метод в media.php
Файл использует эти 2 строки:
$image_baseurl = _wp_upload_dir_baseurl();
$image_baseurl = trailingslashit( $image_baseurl ) . $dirname;
И это $image_baseurl
фактически сформирует новый URL для srcset
атрибут, т.е. даже если весь URL находится в wp_posts
таблица и используется в src
атрибут, его начало не будет использоваться.
Это означает, что если ваш базовый URL в wp_options
стол все еще в http://
изображения получат этот протокол и не будут отображаться по умолчанию вашим браузером при навигации по https.
Для решения этой проблемы вам просто нужно изменить URL-адреса внутри option_value
в wp_options
стол к https://
или просто //
если вы все еще хотите поддерживать оба протокола (с двойной косой чертой). Вы можете сделать это в одном запросе:
UPDATE `wp_options`
SET `option_value` = replace(option_value, 'http://', '//')
WHERE `option_name` IN ('siteurl', 'home')