JavaScript

WordPressにはJavaScriptのための依存マネージャーとエンキューの機能が組み込まれています。そのままのJavaScriptを埋め込む<script>タグは使ってはいけません。

登録とエンキュー

JavaScriptファイルは登録するようにします。登録により依存マネージャーにスクリプトがあることを知らせます。ページにスクリプトを埋め込むにはな必ずエンキューさせます。

ではスクリプトの登録とエンキューをしてみましょう。

// Use the wp_enqueue_scripts function for registering and enqueueing scripts on the front end.
add_action( 'wp_enqueue_scripts', 'register_and_enqueue_a_script' );
function register_and_enqueue_a_script() {
    // Register a script with a handle of `my-script`
    //  + that lives inside the theme folder,
    //  + which has a dependency on jQuery,
    //  + where the UNIX timestamp of the last file change gets used as version number
    //    to prevent hardcore caching in browsers - helps with updates and during dev
    //  + which gets loaded in the footer
    wp_register_script(
        'my-script',
        get_template_directory_uri().'/js/functions.js',
        array( 'jquery' ),
        filemtime( get_template_directory().'/js/functions.js',
        true
    );
    // Enqueue the script.
    wp_enqueue_script( 'my-script' );
}

スクリプトは必要なときだけエンキューするようにしましょう。wp_enqueue_script()の呼び出しを適切に条件分岐でラップしましょう。

ローカライズ

スクリプトをローカライズすることにより、PHPからJSに変数を渡すことができるようになります。これは文字列の国際化(つまりローカライゼーション)によく利用されますが、他にもたくさんの使い道があります。

技術的な面では、スクリプトをローカライズするということは登録したスクリプトの直前に新しい <script> タグが追加されることを意味していて、ローカライズしているときに指定した名称(2番めの引き数)とともに グローバル なJavaScriptのオブジェクトを含んでいることを意味します。これはまた、別のスクリプトをあとから追加したら依存関係にしたがってこのスクリプトを持つということであり、同じようにグローバルなオブジェクトを利用できるということでもあります。WordPressはこうしたチェーンされた依存関係もちゃんと解決します。

ではスクリプトをローカライズしてみましょう。

このJavaScriptファイルの中ではデータは

登録解除 / キューの解除

スクリプトはwp_deregister_script()wp_dequeue_script()によって登録の解除とキューの解除ができます。

AJAX

WordPressでは、wp-admin/admin-ajax.phpにある、AJAX呼び出しのための簡単なサーバーサイドのエンドポイント提供しています。

ではサーバーサイドのAJAXハンドラーをセットアップしてみましょう。

そしてJavaScriptは以下のようになります:

ajax_urlは管理画面のAJAXエンドポイントを表していて、管理画面のインターフェースページが読み込まれると自動的に定義されます。

次に、管理画面のURLを含んだスクリプトをローカライズしてみましょう:

WP AJAX のJavaScriptサイド

これを行うにはいくつか方法があります。もっとも一般的なのは $.ajax() を使う方法です。もちろん $.post()$.getJSON() などのショートカットも利用可能です。

以下はデフォルトの例です。

上の例ではNONCE値の検証のため _ajax_nonce を使ってることに注意してください。これはスクリプトをローカライズする際に自分でセットする必要があります。データ配列に '_ajax_nonce' => wp_create_nonce( "some_value" ),を追加するだけです。すると、PHPコールバックに次のようなリファラーチェックを追加できます: check_ajax_referer( "some_value" )

クリック時のAJAX

特定の要素に対するクリック時(もしくはその他のユーザーインタラクション時)にAJAXリクエストを実行するのは、実際のところとても簡単です。単に $.ajax() (もしくは類似のものの)呼び出しをラップするだけです。また、ディレイも追加することができます。

シングルのAJAXリクエストへの複数コールバック

AJAXリクエスト完了後に複数のことをする必要があることがあります。幸いなことにjQueryではオブジェクトを返しますので、すべてのコールバックをアタッチすることができます。

コールバックの連鎖

よくある状況としては(どのくらい頻繁に必要とされるか、メイントラップにどのくらい簡単にひっとするかによりますが)、AJAXリクエストが完了した時のコールバックの連鎖です。

最初の問題:

AJAXコールバック(A)が実行され AJAXコールバック(B)が(A)を待たなくてはならないことを知らない (A)の終了が早すぎてローカルでの問題が見えない

Aが終了するまでどのように待ち、Bがどのようにスタートして処理するのかは、興味深い質問です。

答えは「遅延」読み込みと「futures」としても知られる「promises(日本語の解説)」です。 以下はその例です:

Source: WordPress.StackExchange / Kaiser

Last updated