it-swarm.com.de

wp_enqueue_script Hinzufügen einer bedingten Anweisung funktioniert nicht

Dies ist der Code, den ich in meiner Funktionsdatei verwende:

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

Ich verwende $wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');, um diesem Skript eine bedingte Anweisung gemäß der Dokumentation hinzuzufügen, die ich online finden kann, die jedoch nicht funktioniert. Der bedingte Code wird nicht angezeigt, die js-Datei jedoch.

Warum funktioniert das nicht?

5
Brady

Aus dem Blickwinkel des Codes scheint diese Bedingung nur für Stile und nicht für Skripte verarbeitet zu werden.

8
Rarst

Es ist ein langer Versuch, aber Sie könnten versuchen, das Skript zu registrieren , dann in die Bedingung einzufügen und dann das Skript in die Warteschlange zu stellen:

// 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' );

Ich weiß aber nicht, dass es funktionieren wird

EDIT

Basierend auf dem zugehörigen Trac-Ticket scheint $wp_scripts diese Methode nicht zu unterstützen.

Möglicherweise müssen Sie das Skript nur aus dem wp_enqueue_script()-System herausziehen und den IE -Aufruf eines bedingten Skripts innerhalb einer steckbaren Funktion wiederholen, die in wp_print_scripts oder wp_head eingebunden ist. Es ist sicherlich nicht ideal, aber wenn es sich um ein Client-Theme für den einmaligen Gebrauch handelt, müssen Sie sich keine Sorgen machen, dass jemand anderes das Skript abmelden muss.

5
Chip Bennett

Dies ist die Arbeit, die ich umsetzen musste, da WP nicht unterstützt, was ich versuchte zu tun

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

Habe gerade eine Teillösung dafür über $is_IE in wp-includes/vars.php gefunden!

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

Das scheint, library/focus.js auf einer if IE Basis zu laden, aber es gibt nichts im Kern, um irgendwelche IE Versionsbedingungen für Skripte zu tun. Sieht aus wie ein Trac Ticket zu dem Thema wurde vorerst zurückgestellt.

3
esmi

Es sieht so aus, als würden Sie es in die Fußzeile einfügen. Haben Sie am Ende der Seite nach der JS-Datei gesucht?

1
cbaigorri

Dies funktioniert auch für Skripte. Aber nur in einer Situation: Wenn das Skript zuerst registered war. Sie können nicht direkt für enqueue gehen. Sie müssen Folgendes tun: register -> add_data -> enqueue. Dies gilt sowohl für Skripte als auch für Stile nach der gleichen Regel.

1
kaiser

Hier ist ein Arbeitsbeispiel für Wordpress 4.2 und höher.

Dieses erste Beispiel wurde zuvor beantwortet hier .

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

Sie können auch die Variable $wp_scripts wie folgt verwenden:

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 reference

0
KeepMove