web-dev-qa-db-ja.com

wp_register_scriptが正しくロードされませんでした

私はこのようなスクリプトをロードしています:

//load scripts
//wp_register_script( $handle, $src, $deps, $ver, $in_footer );

add_action('wp_enqueue_scripts', 'load_scripts');

function load_scripts() {

    if (!is_admin()) {

        wp_register_script('modernizr', get_bloginfo('template_directory') .'/scripts/modernizr-latest.js',false);
        wp_enqueue_script('modernizr');

        wp_enqueue_script('jquery', true );

        wp_register_script('cookie',get_bloginfo('template_directory') . '/scripts/cookie.js', array('jquery'), '1.0',true);
        wp_enqueue_script('cookie');

        wp_register_script( 'Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', true );
        wp_enqueue_script ('Gmaps');

        wp_register_script('plugins', get_bloginfo('template_directory') .'/scripts/plugins.js',true);
        wp_enqueue_script('plugins');

        wp_register_script( 'maps_scripts',  get_bloginfo('template_directory') . '/scripts/maps.js', array('Gmaps'), '1.0', true );
        wp_enqueue_script ('maps_scripts');

        wp_register_script('history', get_bloginfo('template_directory') .'/scripts/history.js', array('jquery'), '1.0',true);
        wp_enqueue_script('history');


    }
}

これにより、modernizr以外のすべてのスクリプトがフッターにロードされることを期待しています。代わりに、それは間違ったmish-mashです。この例から、jquery、google maps、およびplugins.jsは、$in_footerがtrueに設定されていてもヘッダーにロードされます。予想どおり、Cookie、マップ、および履歴がフッターにロードされます。

誰かが私にこれを説明するのを手伝ってもらえますか?

2
zac

ソリューションに入る前の注意点として、get_template_directory_uri()はフィルターされた出力であるため、get_bloginfo()よりも優先されます。とは言っても、修正したコードでは、そのままにしておく理由があった場合に入力を省くために、そのままにしておきました。

あなたの問題は、いくつかのパラメータを無視していることです。括弧の前のパラメータは最後のパラメータではなく、常に左からカウントされるため、多くの場合、$vertrueに設定します。 $in_footerからtrueではなく。また、jqueryをエンキューする必要はありません。これは自動的に実行されますが、とにかくそれを実行しても害はありません。

add_action( 'wp_enqueue_scripts', 'load_scripts ');

function load_scripts() {

    if ( !is_admin() ) {

        wp_enqueue_script( 'jquery' );

        wp_register_script( 'modernizr', get_bloginfo( 'template_directory' ) .'/scripts/modernizr-latest.js' );
        wp_enqueue_script( 'modernizr' );

        wp_register_script( 'cookie', get_bloginfo( 'template_directory' ) . '/scripts/cookie.js', array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'cookie' );

        wp_register_script( 'Gmaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), false, true );
        wp_enqueue_script ( 'Gmaps' );

        wp_register_script( 'plugins', get_bloginfo( 'template_directory' ) .'/scripts/plugins.js', array(), false, true );
        wp_enqueue_script( 'plugins' );

        wp_register_script( 'maps_scripts',  get_bloginfo( 'template_directory' ) . '/scripts/maps.js', array( 'Gmaps' ), '1.0', true );
        wp_enqueue_script ( 'maps_scripts' );

        wp_register_script( 'history', get_bloginfo( 'template_directory' ) .'/scripts/history.js', array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'history' );


    }
}

注: this は一見の価値がありますが、すべてを統一するのに役立ちます。個人的には、たとえそうである必要はないにしても、良い習慣の習慣として、コーディング標準にすべてを書き込もうとしています。

2
mor7ifer