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')
Другие вопросы по тегам