путь до темы в javascript файле

7 мар. 2013 г., 12:48:42
Просмотры: 73.7K
Голосов: 18

Мне нужно включить путь к файлу моей темы внутри javascript файла. Как это сделать? Я уже пробовал:

var templateUrl = "<?php get_stylesheet_directory_uri(); ?>";

function LightboxOptions() {
  this.fileLoadingImage = "'"+templateUrl+"/img/loading.gif'"; // Изображение загрузки
  this.fileCloseImage = "'"+templateUrl+"/img/close.png'"; // Изображение закрытия
  this.resizeDuration = 700; // Продолжительность изменения размера
  this.fadeDuration = 500; // Продолжительность затухания
  this.labelImage = "Изображение"; // Метка изображения
  this.labelOf = "из"; // Метка "из"
}

Это не дает мне путь, а просто вставляет <?php get_stylesheet_directory_uri(); ?> вместо реального пути. Есть идеи? Заранее спасибо!

1
Комментарии

вы пропустили echo ( var templateUrl = "<?php echo get_stylesheet_directory_uri(); ?>"; )

Toni Michel Caubet Toni Michel Caubet
5 мая 2021 г. 11:37:57
Все ответы на вопрос 6
1
42

То, что вам нужно, это функция wp_localize_script.

Используйте её следующим образом при подключении скрипта:

wp_register_script( 'my-script', 'myscript_url' );
wp_enqueue_script( 'my-script' );
$translation_array = array( 'templateUrl' => get_stylesheet_directory_uri() );
// после wp_enqueue_script
wp_localize_script( 'my-script', 'object_name', $translation_array );

В вашем файле style.js будет следующий код:

var templateUrl = object_name.templateUrl;
...
7 мар. 2013 г. 12:59:36
Комментарии

Отлично! Сработало как по волшебству!

James Hall James Hall
28 нояб. 2016 г. 17:06:18
4
11

Существует два основных способа добавления пути к теме в JavaScript-файл.

1) Вы можете использовать функцию wp_localize_script(), рекомендованную WordPress, в файле functions.php. Это создаст JavaScript-объект в заголовке, который будет доступен вашим скриптам во время выполнения.

Пример:

wp_register_script('custom-js',get_stylesheet_directory_uri().'/js/custom.js',array(),NULL,true);
wp_enqueue_script('custom-js');

$wnm_custom = array( 'stylesheet_directory_uri' => get_stylesheet_directory_uri() );
wp_localize_script( 'custom-js', 'directory_uri', $wnm_custom );

Использование в вашем JS-файле:

alert(directory_uri.stylesheet_directory_uri); 

2) Вы можете создать JavaScript-фрагмент, который сохранит URI директории темы в переменной, а затем использовать его следующим образом: Добавьте этот код в файл header.php перед JS-файлом, в котором вы хотите использовать этот путь. Пример:

<script type="text/javascript">
var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
</script>

Использование в вашем JS-файле:

alert(stylesheet_directory_uri);
7 мар. 2013 г. 12:53:15
Комментарии

wp_localize работает! Я пробовал второй подход тоже, но у меня не получилось заставить его работать. wp_localize работает, вероятно, это лучшая практика, не так ли?

kath kath
7 мар. 2013 г. 13:31:16

@charlenemasters чтобы второй подход работал, порядок объявления переменной и доступа к ней очень важен.

Vinod Dalvi Vinod Dalvi
7 мар. 2013 г. 13:33:59

второй подход должен быть с echo, чтобы работать

Claudiu Creanga Claudiu Creanga
21 окт. 2016 г. 18:08:30

@ClaudiuCreanga Спасибо, должно быть echo: var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";

cvr cvr
12 июн. 2018 г. 19:39:18
0

Вы можете локализовать свои JavaScript-файлы, что дает возможность создать массив JavaScript, заполненный значениями, определенными в PHP (такими как локализация или директории).

Если вы загружаете свой JavaScript-файл через wp_enqueue_script или wp_register_script, это легко настроить следующим образом:

function localize_vars() {
    return array(
        'stylesheet_directory' => get_stylesheet_directory_uri()
    );
}

wp_enqueue_script( 'my_script', plugins_url( 'my_plugin/my_script.js' ), array( 'jquery' ) );
wp_localize_script( 'my_script', 'my_unique_name', localize_vars() );

И в ваших JavaScript-файлах вы можете обращаться к этим переменным следующим образом:

my_unique_name.stylesheet_directory
7 мар. 2013 г. 12:59:56
0

Я начал использовать этот удобный небольшой метод для получения директории темы WordPress и сохранения её в качестве глобальной переменной JavaScript (всё непосредственно из JavaScript-файла):

function getThemeDir() {
    var scripts = document.getElementsByTagName('script'),
        index = scripts.length - 1,
        myScript = scripts[index];

    return myScript.src.replace(/themes\/(.*?)\/(.*)/g, 'themes/$1');
}
themeDir = getThemeDir();

Это будет работать только при соблюдении следующих условий:

    1. Этот фрагмент выполняется через внешний JavaScript-файл — например, так:

<script src="/wp-content/themes/themename/assets/app.js"></script>

    2. JS-файл находится в директории вашей темы (или её поддиректории).

12 авг. 2016 г. 21:39:12
0

Вот как я это сделал.

Поместите файл javascript и изображения в папку theme-folder/assets

И отредактируйте следующие файлы.

В functions.php

/* для javascript (только при использовании дочерней темы) */
wp_enqueue_script('my-script', get_template_directory_uri() . '-child/assets/test.js');
wp_localize_script('my-script', 'myScript', array(
    'theme_directory' => get_template_directory_uri() 
));

В вашем javascript файле

var url = myScript.theme_directory + '-child/assets/';
1 янв. 2017 г. 10:46:55
0

Если JavaScript файл загружается из админ-панели WordPress, вы можете использовать эту функцию для получения корневой директории вашей установки WordPress.

function getHomeUrl() {
  var href = window.location.href;
  var index = href.indexOf('/wp-admin');
  var homeUrl = href.substring(0, index);
  return homeUrl;
}

Затем просто добавьте путь к вашей теме, как показано ниже.

var myThemePath = getHomeUrl() + '/wp-content/themes/myTheme';
14 июн. 2016 г. 08:59:59