get_template_directory_uri() и другие URL-теги не работают в теме

20 мар. 2012 г., 23:23:35
Просмотры: 36.5K
Голосов: 3

Итак, я пытаюсь добавить get_template_directory_uri или bloginfo() в мой файл header.php для создания относительных путей к CSS и JS файлам в теме.

Например,

    <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">

Теоретически это должно отображаться как

    <link rel="stylesheet" href="http://mysite.com/wp-content/themes/myTheme/css/style.css">

Проблема в том, что когда я просматриваю тег <head> в исходном коде, я вижу только:

    <link rel="stylesheet" href="/css/style.css">

Все остальные теги шаблона работают в моих файлах (get_permalink(), the_title() и т.д.), но этот не работает. echo get_bloginfo('url') также работает.

Я думал о том, чтобы изменить файл wp-config.php и сделать что-то вроде:

define('WP_HOME','http://example.com/blog');
define('WP_SITEURL','http://example.com/blog');

...но я не уверен, является ли это лучшей практикой для переписывания URL.

Что я упускаю?

0
Все ответы на вопрос 5
6

Что у вас есть:

 <link rel="stylesheet" href="<?php echo get_template_directory_uri(); ?>/css/style.css">

должно работать нормально. Я скопировал и вставил это в свой header.php, и это сработало.

Но это не правильный способ подключения CSS или JavaScript файлов. Правильный способ — использовать хук wp_enqueue_scripts. Например, допустим, у вас есть JavaScript файл, который вы хотите загрузить и который требует jQuery для работы. Вы регистрируете скрипт и указываете jQuery как зависимость. WordPress сделает всё остальное:

<?php
function my_scripts_method() {
   // регистрируем расположение скрипта и его зависимости
   wp_register_script('custom_script',
       get_template_directory_uri() . '/js/custom_script.js',
       array('jquery')
    );
   // подключаем скрипт
   wp_enqueue_script('custom_script');
}
add_action('wp_enqueue_scripts', 'my_scripts_method');
?>

Для стилей (используется тот же хук):

function my_styles_method() {  
    // Регистрируем стиль для темы:  
    wp_register_style( 'my-custom-style', get_template_directory_uri().'/css/custom-style.css');  

    // подключаем стиль  
    wp_enqueue_style( 'my-custom-style' );  
}  
add_action( 'wp_enqueue_scripts', 'my_styles_method' ); 

Пожалуйста, прочитайте страницы Кодекса о wp_enqueue_script() и wp_enqueue_style().

Это может показаться неважным, но особенно при загрузке скриптов вы, вероятно, обнаружите, что их "ручная" загрузка может сломать вашу тему и/или плагины.

21 мар. 2012 г. 00:55:31
Комментарии

Я даже не знал, что это существует. Я определенно перенесу свой код на этот метод в ближайшее время. Моя текущая проблема - попытка понять, почему <?php get_template_directory_uri() ?> возвращает пустое значение.

aboutaaron aboutaaron
21 мар. 2012 г. 01:32:11

Ты использовал var_dump для проверки?

Stephen Harris Stephen Harris
21 мар. 2012 г. 01:34:03

К сожалению, я не знаком с использованием var_dump в WordPress. Не мог бы ты пояснить?

aboutaaron aboutaaron
21 мар. 2012 г. 01:37:11

Это не WordPress: var_dump(get_template_directory_uri());

Stephen Harris Stephen Harris
21 мар. 2012 г. 01:39:01

Извините, я хотел сказать, что не знаю, как использовать var_dump и прочитать вывод в WordPress. Предполагаю, что просто вызов этого в header.php не даст мне нужного результата. Но все равно спасибо за помощь.

aboutaaron aboutaaron
21 мар. 2012 г. 02:42:19

Да, это выведет содержимое. Если вы делаете это в header, вам, вероятно, придется поискать это в HTML страницы (это может быть внутри <head>)

Stephen Harris Stephen Harris
21 мар. 2012 г. 03:22:31
Показать остальные 1 комментариев
1

Немного запоздалый комментарий, но я тоже столкнулся с этой проблемой. В моём случае я заменил все файлы темы на пустой шаблон стартовой темы и не выполнил шаги установки темы, из-за чего система не могла найти правильную директорию. Повторная активация темы может быть подходящим первым шагом для решения этой проблемы.

25 июл. 2013 г. 20:27:52
Комментарии

Я сталкивался с такой же проблемой - в моем случае get_template_directory_uri() возвращал URI дочерней темы, а не родительской, что, конечно, прямо противоположно тому, что должно происходить. Переключение на родительскую тему и затем обратно на дочернюю полностью решило проблему для меня.

Matt Lohkamp Matt Lohkamp
29 сент. 2014 г. 02:14:23
9

Вы пробовали использовать простую версию bloginfo, например:

<link rel="stylesheet" type="text/css" media="all" href="<?php bloginfo('template_url'); ?>/css/style.css" />

Или можно использовать ваш вариант (get_bloginfo), но я думаю
вам следует сначала присвоить значение переменной, а затем вывести её..

<link rel="stylesheet" type="text/css" media="all" href="<?php $turl = get_bloginfo('template_url'); echo $turl; ?>/css/style.css" />

...

Надеюсь, это поможет решить вашу проблему...

С наилучшими пожеланиями, Sagive.

20 мар. 2012 г. 23:54:21
Комментарии

Привет, Sagive,

Спасибо за ответ.

К сожалению, ни одно из твоих предложений не сработало. URL по-прежнему создаются относительно "mysite.com" вместо "mystie.com/wp-content/themes/myTheme/"

Продолжу экспериментировать, может быть, найду решение.

aboutaaron aboutaaron
21 мар. 2012 г. 00:39:06

Всегда рад - получилось сделать?

Sagive Sagive
21 мар. 2012 г. 00:40:30

На самом деле, get_bloginfo( 'template_url' ) просто вызывает get_template_directory_uri(), так что более простой способ - использовать get_template_directory_ur() напрямую.

Chip Bennett Chip Bennett
21 мар. 2012 г. 01:07:14

@ChipBennett Согласен. Просто по какой-то причине на этой установке мой сайт неправильно вызывает get_template_directory_uri(). Я надеялся, что кто-то сталкивался с подобным.

aboutaaron aboutaaron
21 мар. 2012 г. 01:13:29

я не вижу разницы :) - bloginfo есть в моём списке сниппетов, так что... я предпочитаю его... скажи @aboutaaron Ты хочешь сказать, что оно до сих пор не работает?

Sagive Sagive
21 мар. 2012 г. 01:16:43

@SagiveSEO Верно. <?php bloginfo('template_url'); ?> ничего не выводит! Я никогда с таким не сталкивался. На dev-версии всё работало нормально, но после переноса темы URL сломались и теперь это не работает.

aboutaaron aboutaaron
21 мар. 2012 г. 01:29:58

@SagiveSEO в этом и суть: если echo get_template_directory_uri() не работает, то невозможно, чтобы bloginfo( 'template_url' ) работал как альтернатива. (Смотрите ссылку на ядро, которую я прикрепил.)

Chip Bennett Chip Bennett
21 мар. 2012 г. 03:14:03

@aboutaaron у тебя получилось заставить это работать? У меня такая же проблема. get_stylesheet_directory_uri() и get_template_directory_uri() возвращают пустую строку.

windyjonas windyjonas
25 нояб. 2013 г. 10:38:24

если возвращается пустая строка, значит страница, где ты используешь эту команду, не находится внутри WordPress... Это внутренняя команда WP и должна работать без проблем: get_template_directory_uri() ИЛИ get_bloginfo('template_url') - в каком файле ты её используешь?

Sagive Sagive
26 нояб. 2013 г. 00:55:31
Показать остальные 4 комментариев
0

Если функция get_bloginfo('url') работает в header.php, то вместо использования get_template_directory_uri() примените функцию bloginfo('stylesheet_url'), которая возвращает URL основного CSS-файла (обычно style.css) активной темы.

22 мар. 2012 г. 07:03:13
0

Деактивируйте текущую тему (т.е. активируйте другую тему, например TwentyFourteen), а затем снова активируйте вашу тему.

При активации темы WordPress выполняет первоначальную настройку относительных URI и другие действия. В некоторых случаях (особенно при разработке новых тем) WordPress может не выполнить этот код инициализации. Деактивация и повторная активация темы дает WordPress еще одну возможность выполнить код начальной настройки темы.

9 апр. 2014 г. 21:06:26