ścieżka motywu w pliku javascript

15

Muszę zawrzeć ścieżkę do mojego pliku motywu w pliku javascript. Jak miałbym to zrobić? Próbowałem już:

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 = "Image";
  this.labelOf = "of";
}

Nie daje mi to ścieżki, ale po prostu wstawia <?php get_stylesheet_directory_uri(); ?>zamiast rzeczywistej ścieżki. Jakieś pomysły? Z góry dziękuję!

mistrzowie charlenemers
źródło

Odpowiedzi:

33

To czego szukasz to funkcja wp_localize_script .

Używasz go w ten sposób podczas kolejkowania skryptu

wp_register_script( 'my-script', 'myscript_url' );
wp_enqueue_script( 'my-script' );
$translation_array = array( 'templateUrl' => get_stylesheet_directory_uri() );
//after wp_enqueue_script
wp_localize_script( 'my-script', 'object_name', $translation_array );

W twoim style.js będą:

var templateUrl = object_name.templateUrl;
...
david.binda
źródło
niesamowite. działało jak urok!
James Hall
6

Są dwa następujące sposoby dodawania ścieżki motywu w pliku javascript.

1) Możesz użyć wp_localize_script () sugerowanego przez wordpress w pliku functions.php. Spowoduje to utworzenie obiektu JavaScript w nagłówku, który będzie dostępny dla twoich skryptów w czasie wykonywania.

Przykład:

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 );

i można użyć w pliku js w następujący sposób:

alert(directory_uri.stylesheet_directory_uri); 

2) Możesz utworzyć fragment kodu JavaScript, który zapisuje uri katalogu szablonów w zmiennej, i użyć go później w następujący sposób: Dodaj ten kod w pliku header.php przed plikiem js, w którym chcesz użyć tej ścieżki. Przykład:

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

i można użyć w pliku js w następujący sposób:

alert(stylesheet_directory_uri);
Vinod Dalvi
źródło
wp_localize działa! Próbowałem też drugiego podejścia, ale nie udało mi się go uruchomić. wp_localize działa to chyba lepsza praktyka, nie?
charlenemasters
@charlenemasters, aby drugie podejście działało w kolejności deklarowania zmiennych i uzyskiwania do nich dostępu jest bardzo ważne.
Vinod Dalvi
2
drugie podejście powinno być echo, aby działać
Claudiu Creanga
@ClaudiuCreanga Dzięki, powinno być echo: var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
ycc_swe
1

Możesz zlokalizować swoje pliki javascript, co daje Ci możliwość wygenerowania tablicy javascript wypełnionej wartościami zdefiniowanymi w PHP (takimi jak lokalizacja lub katalogi).

Po załadowaniu koryta javascript wp_enqueue_scriptlub wp_register_scriptjego łatwej konfiguracji, wykonaj następujące czynności:

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() );

A w plikach javascript możesz wywoływać te zmienne poprzez:

my_unique_name.stylesheet_directory
Mike Madern
źródło
1

Zacząłem używać tej wygodnej, małej metody, aby uzyskać katalog motywów WordPress i przechowywać go jako globalną zmienną JavaScript (wszystko z pliku 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();

Będzie to działać tylko wtedy, gdy zostaną spełnione następujące warunki :

    1. Ten fragment kodu jest wykonywany przez zewnętrzny plik JavaScript - taki jak ten:

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

    2. Plik js znajduje się w katalogu motywów witryny (lub podkatalogu).

blizzrdof77
źródło
1

Tak to zrobiłem.

Umieść plik javascript i obrazy w folderze / zasobach kompozycji

I edytuj następujące pliki.

W functions.php

/* for javascript (only when using child theme) */
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() 
));

W twoim pliku javascript

var url = myScript.theme_directory + '-child/assets/';
Takao Shibamoto
źródło
0

Jeśli plik javascript jest ładowany z panelu administracyjnego, możesz użyć tej funkcji javascript, aby uzyskać katalog główny instalacji WordPress.

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

Następnie po prostu skontaktuj się ze ścieżką do swojego motywu, jak poniżej.

var myThemePath = getHomeUrl() + '/wp-content/themes/myTheme';
Jam Risser
źródło