サポート » 使い方全般 » wp_localize_scriptの実行順序につきまして

  • 解決済 tenten64

    (@tenten64)


    以下【あ】はできるのに【い】ができません。

    【あ】my_enqueue_scripts()によって、ファイルとfirst_datasを両方読む方法
    【い】ファイルはmy_enqueue_files()で読み、first_datasはmy_enqueue_first_datasで読む方法

    という風に処理をわけたのが【い】で、この方がわかりやすいと思ったのですが、なぜこれではできなくなってしまうのでしょうか?

    そしてどうすれば【い】のように処理を分けた流れでできるようになりますでしょうか?

    functions.php

    
    define("DIR_TEMPLATE_URI", get_template_directory_uri());
    
    /*
    【あ】my_enqueue_scripts()だけ
    ----------------------------------------------------*/
    add_action( 'wp_enqueue_scripts', 'my_enqueue_scripts' );
    function my_enqueue_scripts(){
    
    	// ファイルを読む
    	wp_enqueue_script( 'first.js', DIR_TEMPLATE_URI . '/js/first.js', array(), '0.0.1', true );
    	wp_enqueue_script( 'page.js', DIR_TEMPLATE_URI . '/js/page.js', array(), '0.0.1', true );
    	wp_enqueue_script( 'single.js', DIR_TEMPLATE_URI . '/js/single.js', array(), '0.0.1', true );
    
    	// first_datas を読む
    	$first_datas = my_get_first_datas ();	
    	wp_localize_script('first.js', 'first_datas ', $first_datas );	
    }
    
    /*
    【い】my_enqueue_files()とmy_enqueue_first_datas()
    ----------------------------------------------------*/
    add_action( 'wp_enqueue_scripts', 'my_enqueue_files' );
    function my_enqueue_files(){
    	// ファイルを読む
    	wp_enqueue_script( 'first.js', DIR_TEMPLATE_URI . '/js/first.js', array(), '0.0.1', true );
    	wp_enqueue_script( 'page.js', DIR_TEMPLATE_URI . '/js/page.js', array(), '0.0.1', true );
    	wp_enqueue_script( 'single.js', DIR_TEMPLATE_URI . '/js/single.js', array(), '0.0.1', true );
    }
    
    add_action( 'wp_enqueue_scripts', 'my_enqueue_first_datas' );
    function my_enqueue_first_datas(){
    	// first_datas を読む
    	$first_datas = my_get_first_datas ();	
    	wp_localize_script('first.js', 'first_datas ', $first_datas );	
    }
    
    
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • ishitaka

    (@ishitaka)

    ご提示のコードの範囲内では問題がないように見受けられます。
    確認ですが、記述順(実行順)は my_enqueue_files → my_enqueue_first_datas で間違いないでしょうか?

    トピック投稿者 tenten64

    (@tenten64)

    こんばんは、いつもご回答ありがとうございます。

    ご指摘の通りで、
    my_enqueue_files → my_enqueue_first_datas
    という順序にしたところ解決いたしました。

    助かりました。(__)

    でも・・どうしてでしょうか?

    PHPは関数の順序が関係ないものと理解しています。
    たとえば以下はhoge()の前にfuga()がないのに実行できますよね。

    
    <?php
    echo hoge();
    function hoge(){
        $fuga = fuga();
        return $fuga;
    }
    function fuga(){
        return 'fuga';
    }
    

    なのにどうして、今回の質問の件では順番が重要なのでしょうか?

    ishitaka

    (@ishitaka)

    順番が重要なのでしょうか?

    関数の定義位置は後方参照できるので記述順は関係ありませんが、実行順は重要です。
    add_action() のフックは優先順位(第3引数)が同じ場合はプッシュ順に処理されます。

    トピック投稿者 tenten64

    (@tenten64)

    ご返信誠にありがとうございます。
    大変勉強にりました。
    第3引数、たまに見ますが、なんだこれという程度でいつもスルーしていましたw
    【い】は以下とすべきでしたね。

    
    add_action( 'wp_enqueue_scripts', 'my_enqueue_files', 1 );
    add_action( 'wp_enqueue_scripts', 'my_enqueue_first_datas', 2 );
    

    覚えておきます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「wp_localize_scriptの実行順序につきまして」には新たに返信することはできません。