caminho do tema no arquivo javascript


15

Preciso incluir o caminho para o meu arquivo de tema em um arquivo javascript. Como eu iria fazer isso? Eu já tentei:

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";
}

Isso não me dá o caminho, mas apenas insere em <?php get_stylesheet_directory_uri(); ?>vez do caminho real. Alguma ideia? Desde já, obrigado!

Respostas:


32

O que você está procurando é a função wp_localize_script .

Você a usa assim ao enfileirar o script

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

No seu style.js, haverá:

var templateUrl = object_name.templateUrl;
...

impressionante. funcionou como um encanto!
James Hall

6

Estas são as duas maneiras a seguir de adicionar o caminho do tema no arquivo javascript.

1) Você pode usar wp_localize_script () sugerido pelo wordpress no seu arquivo functions.php. Isso criará um objeto Javascript no cabeçalho, que estará disponível para seus scripts em tempo de execução.

Exemplo:

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

e pode usar no seu arquivo js da seguinte maneira:

alert(directory_uri.stylesheet_directory_uri); 

2) Você pode criar um snippet Javascript que salva o uri do diretório de modelos em uma variável e usá-lo posteriormente, da seguinte maneira: Adicione esse código no arquivo header.php antes do arquivo js no qual você deseja usar esse caminho. Exemplo:

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

e pode usar no seu arquivo js da seguinte maneira:

alert(stylesheet_directory_uri);

wp_localize funciona! Também tentei a segunda abordagem, mas não consegui fazê-la funcionar. wp_localize works é provavelmente uma prática melhor, não é?
Charlenemasters #

@charlenemasters para fazer a segunda abordagem funcionar na ordem de declarar variável e acessá-la é muito importante.
Vinod Dalvi

2
a abordagem segundo deve ser com echo, a fim de trabalho
Claudiu Creanga

@ClaudiuCreanga Obrigado, deve ser eco: var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
ycc_swe 12/12/18

1

Você pode localizar seus arquivos javascript, o que lhe dá a oportunidade de gerar uma matriz javascript preenchida com valores definidos pelo PHP (como localização ou diretórios).

Se você carregar seu arquivo javascript wp_enqueue_scriptou for wp_register_scriptfácil de configurar, da seguinte maneira:

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

E nos seus arquivos javascript, você pode chamar essas variáveis:

my_unique_name.stylesheet_directory

1

Comecei a usar esse pequeno método conveniente para obter o diretório de temas do WordPress e armazená-lo como uma variável JavaScript global (tudo dentro de um arquivo 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();

Isso funcionará apenas se as seguintes condições forem atendidas:

    1. Este trecho é executado através de um arquivo JavaScript externo - assim:

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

    2. O arquivo js reside no diretório de temas do seu site (ou subdiretório).


1

Foi assim que eu fiz.

Coloque o arquivo javascript e as imagens na pasta / recursos do tema

E edite os seguintes arquivos.

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

No seu arquivo javascript

var url = myScript.theme_directory + '-child/assets/';

0

Se o arquivo javascript for carregado no painel do administrador, você poderá usar esta função javascript para obter a raiz da sua instalação do WordPress.

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

Em seguida, basta entrar em contato com o caminho para o seu tema, como abaixo.

var myThemePath = getHomeUrl() + '/wp-content/themes/myTheme';
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.