web-dev-qa-db-ja.com

条件付きステートメントを追加するwp_enqueue_scriptが機能しない

これは私の関数ファイルで使用しているコードです。

add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
    global $wp_scripts;
    if(!is_admin()) {
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
        wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
        $wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
    }
}

add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
    if(!is_admin()) {
        wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
        wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
        wp_enqueue_script('jquery');
        wp_enqueue_script('dd_belatedpng');
        wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery', 'dd_belatedpng'), '1.0', true);
    }
}

私は$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');を使用して、このスクリプトに条件付きステートメントを追加していますが、オンラインで見つけることができますが、機能しません。条件付きコードは表示されていませんが、jsファイルは表示されています。

なぜこれが機能しないのですか?

5
Brady

コードを簡単に見ると、この条件はスクリプトではなくスタイルに対してのみ処理されるようです。

8
Rarst

これは長いショットですが、 登録 スクリプト、 その後 条件式での追加、 その後 スクリプトのキューへの登録を試すことができます。

// Register the script
wp_register_script( 'dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true );
// Attempt to add in the IE conditional tags
$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
// Enqueue the script
wp_enqueue_script( 'dd_belatedpng' );

それがうまくいくかどうか私は知らない

_編集_

関連するTracチケットに基づいて、$wp_scriptsはこのメソッドをサポートしていないようです。

wp_enqueue_script()システムからスクリプトを取り出し、wp_print_scriptsまたはwp_headにフックされたプラグイン可能な関数の中で、条件付きで囲まれたIEスクリプト呼び出しをエコーするだけです。確かに理想的ではありませんが、これが使い捨てクライアントのテーマであれば、他の人がスクリプトを登録解除する必要があることを心配する必要はありません。

5
Chip Bennett

WPは私がやろうとしていたことをサポートしていないので、これは私が整備しなければならなかった回避策です。

functions.php

add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
    if(!is_admin()) {
        wp_deregister_script('jquery');
        wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
        wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
    }
}

add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
    if(!is_admin()) {
        wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
        wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
        wp_enqueue_script('jquery');
        wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery'), '1.0', true);
    }
}

footer.php

<?php wp_footer(); ?>
<!--[if lt IE 7]>
<?php wp_print_scripts(array('dd_belatedpng')); ?>
<script>DD_belatedPNG.fix("img, .png_bg");</script>
<![endif]-->
5
Brady

Wp-includes/vars.phpの$is_IEでこれに対する部分的な解決策を見つけたところです。

function emporium_enqueue_scripts() {
    global $is_IE;
    if( $is_IE ) {
        wp_register_script( 'emporium-focus' , get_template_directory_uri() . '/library/focus.js', '', '',  true );
        wp_enqueue_script( 'emporium-focus' );
    }
}
add_action('init', 'emporium_enqueue_scripts');

Library/focus.jsはif IEベースでロードされるようですが、スクリプトに対してIEバージョン条件を実行するためのコアはありません。 Tracチケット のように/ /件名は当分の間棚に入れられています。

3
esmi

フッターに入れているようです。 JSファイルのページの終わりを見ましたか?

1
cbaigorri

これはスクリプトにも働きます。ただし、状況が1つだけの場合は、スクリプトが最初にregisteredであったとします。あなたはenqueueに直行することはできません。 register - > add_data - > enqueueのようにしなければなりません。これはスクリプトでもスタイルでも同じルールです。

1
kaiser

これがWordpress 4.2以上の作業例です。

この最初の例は以前に回答された ここ

    wp_register_script("ie_jshandle",
                 get_template_directory_uri() . "/js/jsSpecificIE.js",
                 array(),
                 '1.0',
                 false );
    wp_enqueue_script("ie_jshandle");
    wp_script_add_data("ie_jshandle", "conditional", "lt IE 9");    

$wp_scripts変数をこのように使うこともできます。

function wpse_20873_enq_scripts() {
global $wp_scripts;
        wp_register_script("ie_jshandle",
                     get_template_directory_uri() . "/js/jsSpecificIE.js",
                     array(),
                     '1.0',
                     false );
        wp_enqueue_script("ie_jshandle");

        $wp_scripts->add_data("ie_jshandle", "conditional", "lt IE 9"); 
}
add_action("wp_enqueue_scripts", "wpse_20873_enq_scripts");

wp_script_add_dataリファレンス

0
KeepMove