JavaScriptファイルのテーマパス


15

テーマファイルへのパスを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 = "Image";
  this.labelOf = "of";
}

これはパスを提供しません<?php get_stylesheet_directory_uri(); ?>が、実際のパスの代わりに挿入するだけです。何か案は?前もって感謝します!

回答:


32

探しているのはwp_localize_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 );

style.jsでは、次のようになります。

var templateUrl = object_name.templateUrl;
...

驚くばかり。魔法のように働いた!
ジェームズホール

6

これらは、javascriptファイルにテーマパスを追加する次の2つの方法です。

1) functions.phpファイルでwordpressによって提案されたwp_localize_script()を使用できます。これにより、ヘッダーに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)テンプレートディレクトリuriを変数に保存するJavascriptスニペットを作成し、後で次のように使用できます。このコードをheader.phpファイルで、このパスを使用するjsファイルの前に追加します。例:

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

次のようにjsファイルで使用できます:

alert(stylesheet_directory_uri);

wp_localizeは動作します!私も2番目のアプローチを試しましたが、うまく機能させることができませんでした。wp_localizeはおそらくより良い方法です。
シャーリーンマスターズ

@charlenemastersは、2番目のアプローチを変数を宣言してアクセスする順序を機能させることが非常に重要です。
ヴィノッドダルビ

2
2番目のアプローチはecho、動作するためにあるべきです
Claudiu Creanga

@ClaudiuCreangaありがとう、エコーする必要があります: var stylesheet_directory_uri = "<?php echo get_stylesheet_directory_uri(); ?>";
ycc_swe

1

JavaScriptファイルをローカライズできます。これにより、PHPで定義された値(ローカライズやディレクトリなど)で埋められたjavascript配列を生成できます。

javascriptファイルトラフをロードするwp_enqueue_scriptwp_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

1

私はこの便利な小さな方法を使用して、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ファイルは、サイトのテーマディレクトリ(またはサブディレクトリ)内にあります。


1

これは私がやった方法です。

JavaScriptファイルと画像をテーマフォルダー/アセットに配置します

そして、次のファイルを編集します。

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

javascriptファイル内

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

0

javascriptファイルが管理ダッシュボードからロードされている場合、このjavascript関数を使用して、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';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.