Тема Wordpress не может найти CSS (localhost)

Я использую тему Wordpress с http://html5blank.com, и она отлично работает, когда я загружаю ее на свои серверы в Интернете. , но когда я использую его локально с помощью Wordpress Bitnami Stack, тема не может найти файл css. В header.php у вас есть:

<!-- css + javascript -->
<?php wp_head(); ?>

но когда я просматриваю исходный код сайта разработки на локальном хосте (после активации темы), я обнаруживаю, что href в css пусто:

<!-- css + javascript -->
<link rel='stylesheet' id='normalize-css'  href='' media='all' />
<link rel='stylesheet' id='html5blank-css'  href='' media='all' />

Между тем он находит изображения и значки:

<!-- icons -->
<link href="http://localhost:8080/wordpress/wp-content/themes/html5blank-master/img/icons/favicon.ico" rel="shortcut icon">
<link href="http://localhost:8080/wordpress/wp-content/themes/html5blank-master/img/icons/touch.png" rel="apple-touch-icon-precomposed">

Моя ОС Ubuntu 12.10. Может ли это быть проблемой Bitnami, или я могу это исправить, чтобы работать с веб-сайтом локально? Обратите внимание, что тема по умолчанию «twentytwelve» отлично работает в моей настройке.

ОБНОВЛЕНИЕ: я сравнил и попробовал обе версии 1.2.9 и 1.4.0 (текущая версия) темы html5blank в своем стеке Bitnami Wordpress. Файлы functions.php обеих версий идентичны в том, что касается wp_register_style(), но версия 1.2.9 заполняет ссылки на css, а версия 1.4.0 оставляет их пустыми. Также обратите внимание, что 1.4.0 отлично работает при установке Bitnami в Windows 7.


person pooryay21    schedule 15.04.2013    source источник
comment
Я только что попробовал это (я все равно планировал попробовать!), И это работает для меня локально, при установке, отличной от Bitnami. Кажется, нет ничего странного в том, как стили ставятся в очередь (это делается в функции html5blank_styles, начиная со строки 130 в functions.php, если это поможет). Есть ли что-нибудь в журналах ошибок Bitnami apache?   -  person Matt Gibson    schedule 15.04.2013
comment
Нет, я ничего не могу найти в журналах Apache Bitnami. Я даже перезапустил службы, и это дает те же результаты. Я пытался сам добавить таблицы стилей в файл header.php, и css отлично работает таким образом, но метод functions.php каждый раз терпит неудачу и оставляет ссылку пустой.   -  person pooryay21    schedule 15.04.2013
comment
Re: ваше обновление, вы используете одну и ту же версию WordPress локально и на сервере? Мне интересно, это что-то странное, например, взаимодействие между ошибкой WordPress и точным способом кодирования темы или что-то в этом роде...   -  person Matt Gibson    schedule 16.04.2013
comment
Ну, вот что: я могу воспроизвести вашу проблему, используя Bitnami на OS X. Точно так же.   -  person Matt Gibson    schedule 16.04.2013
comment
Да, на обоих работает wordpress 3.5.1, самая последняя и лучшая. Я понятия не имею, что это за ошибка или какое программное обеспечение за это отвечает, но если бы кто-то другой смог воссоздать ее, мы могли бы узнать немного больше.   -  person pooryay21    schedule 16.04.2013
comment
Так может быть ошибка взаимодействия между этой версией темы и Bitnami для Linux и OSX? Странный...   -  person pooryay21    schedule 16.04.2013
comment
Я проследил это до того, как esc_url() возвращает пустое значение при запуске по URL-адресу href в классе WP_Styles. Пока не уверен, почему он это делает. Его может смущает номер порта — ваша установка BitNami работает на нестандартном порту? (Мой по умолчанию работает на 8080, поэтому URL-адрес моего сайта выглядит как http://localhost:8080/wordpress/.)   -  person Matt Gibson    schedule 16.04.2013
comment
Вместо этого Windows использует http://127.0.0.1/wordpress.   -  person pooryay21    schedule 16.04.2013


Ответы (2)


Проблема заключается во взаимодействии между некоторым кодом в дизайне темы и WordPress, работающим на нестандартном номере порта.

Я отследил ситуацию до функции wp_kses_bad_protocol, сообщающей функции esc_url WordPress (которая используется очередью стилей, классом WP_Styles в wp-includes/class.wp-styles.php), что протокол для URL-адреса таблицы стилей недействителен. esc_url предназначено для предотвращения того, чтобы непристойные вещи превращались в URL-адреса; одна из проверок состоит в том, чтобы увидеть, есть ли что-нибудь подозрительное, например, протокол javascript: вместо http:.

Ложное обнаружение проблемы, по-видимому, было вызвано тем, что тема html5blank добавила функцию фильтра html5blank_protocol_relative для фильтра style_loader_src. В целом это не кажется чем-то плохим (относительный протокол в основном означает замену http://whatever... на //whatever..., что позволяет избежать проблем с смешиванием https и http на одной и той же странице — «относительный протокол» URL-адрес //whatever будет использовать https или http соответственно.)

Однако, когда вы запускаете WordPress на определенном номере порта, это, кажется, сбивает с толку обнаружение плохого протокола.

Короче говоря: вы можете сообщить об этом разработчику темы, чтобы он знал, что из-за этого его тема ломается при запуске WordPress на нестандартном порту, то есть с URL-адресом типа http://localhost:8080/wordpress, а не http://localhost/wordpress.

В краткосрочной перспективе я бы просто прокомментировал эти строки:

add_filter('script_loader_src', 'html5blank_protocol_relative'); // Protocol relative URLs for enqueued scripts
add_filter('style_loader_src' , 'html5blank_protocol_relative'); // Protocol relative URLs for enqueued styles

...в теме functions.php; это должно отключить относительную фильтрацию URL-адресов протокола, и ваша тема должна работать локально. Если ваши живые сайты не используют https, они все равно должны нормально работать и с этим изменением, и даже если они используют https, вы не будете хуже, чем с большинством существующих тем.

person Matt Gibson    schedule 15.04.2013
comment
Это сделало это! Большое спасибо и низкий поклон! - person pooryay21; 16.04.2013

Вам нужно посмотреть functions.php — ваша тема, скорее всего, использует enque как метод для передачи CSS в wp_head. Дополнительную информацию см. в этом руководстве: http://wp.tutsplus.com/articles/how-to-include-javascript-and-css-in-your-wordpress-themes-and-plugins/

person ArleyM    schedule 15.04.2013
comment
Спасибо за предложение. Из этого руководства видно, что это functions.php (который я не изменил из того, что вы получили на html5blank.com) правильно настроен, но он просто не выдает полный код при просмотре на localhost. Странно, что затронуты только ссылки на файлы css... - person pooryay21; 15.04.2013
comment
Enquing — правильный способ сделать это, но вы также можете вызвать его вручную, например: ‹link rel=stylesheet href=‹?php bloginfo( 'template_directory' ); ?›/style.css› Обычно я бы не рекомендовал его, но было бы обидно, если бы что-то настолько маленькое помешало вам выполнять более важную работу. - person ArleyM; 15.04.2013
comment
Вы правы, кажется тривиальным, чтобы это мешало мне, но я подумал, что смогу найти исправление через этот канал. Ручное исправление работает нормально, и тогда я могу предположить, что смогу удалить обходной путь, как только загружу его на свои серверы, поскольку метод functions.php, похоже, работает везде, кроме моего стека Ubuntu Bitnami Wordpress. Спасибо. - person pooryay21; 16.04.2013