Reserviere und reiße bedingte (browserspezifische) Javascript-Dateien ein?

Die WP.SE-Community hat immer die Verwendung von wp_register_script und wp_enqueue_script zum Hinzufügen von Skripts in einem wp_enqueue_script / Template (und ebenso, wp_register_style und wp_enqueue_style für Stylesheets) wp_enqueue_style .


So registriere ich und lege meine Skripte in die Warteschlange …

Zuerst füge ich etwas in functions.php hinzu

 add_action('init','wpse54189_register_script'); function wpse54189_register_script(){ //Register scripts wp_enqueue_script( 'jquery' ); wp_register_script( 'aahan_bootstrap_transition', get_template_directory_uri().'/js/bootstrap-transition.js'); wp_register_script( 'aahan_bootstrap_carousel', get_template_directory_uri().'/js/bootstrap-carousel.js', array('aahan_bootstrap_transition')); wp_register_script( 'wpse54189_ajax_comment', get_template_directory_uri().'/js/no-reload-comments.js'); } 

dann rufe es in einer Template-Datei (zB header.php) so auf

   

Kommen wir nun zum Punkt: Wie kann ich “bedingte JavaScript-Dateien” registrieren und in die Warteschlange stellen, die von bestimmten Browsern erkannt werden? Beispielsweise:

  

Wie registriere und versetze ich das richtig?

PS: Ich benutze das Reddle-Thema , das von den Themenwranglern bei Automattic entwickelt wurde. Und die header.php des Themes verwendet direkt den gerade erwähnten Code – dh es wird nicht in die Warteschlange gestellt. Also, heißt das, es ist der einzige Weg, es zu tun?

Solutions Collecting From Web of "Reserviere und reiße bedingte (browserspezifische) Javascript-Dateien ein?"

WP_Scripts und WP_Styles classn befinden sich hinter den functionen wp_enqueue_script und wp_enqueue_style . Wenn Sie sich die WP_Scripts ( Skripte und Stile ) ansehen, werden Sie sehen, dass WP_Scripts class WP_Scripts keine Art von bedingten Skripten unterstützt, sondern! Sie können sehen, dass WP_Styles tut! Das Problem ist, dass wp_enqueue_style es nicht erlaubt, eine Bedingung zu wp_enqueue_style .

Also müssen wir einen kleinen Hack machen:

 add_filter( 'wp_enqueue_scripts', 'wpse2345_enqueue_scripts' ); function wpse2345_enqueue_scripts() { wp_enqueue_style( 'mystyle', 'url/of/my/style.css', array(), '1.0.0' ); global $wp_styles; $wp_styles->registered['mystyle']->add_data( 'conditional', 'lt IE 9' ); } 

Ein solcher Hack wird möglich, weil alle registrierten Stile im registered Feld der WP_Styles class gespeichert sind. Jeder registrierte Stil ist ein Objekt der _WP_Dependency class, mit dem Sie zusätzliche Daten hinzufügen können.

Leider funktioniert dieser Hack nicht für Skripte.

Zusätzliche Information:
Ich habe den Code in Aaron Campbells Essence Theme letzte Nacht durchgespielt und bemerkt, dass er sowohl einen Browser als auch ein bedingtes Skript und Stil anruft.

 /** * @var WP_Scripts */ global $wp_scripts; // Conditionally load this only for IE < 9 $wp_scripts->add_data( 'html5', 'conditional', 'lt IE 9' ); /** * @var WP_Styles */ global $wp_styles; // Conditionally load this only for IE < 8 $wp_styles->add_data( 'blueprint-ie', 'conditional', 'lt IE 8' ); 

Es gibt auch ein Ticket und einen Patch, aber es ist noch nicht im core . Offensichtlich funktioniert das bedingte Skript nicht ohne den Patch, aber Sie müssen wissen, dass Sie die Methode add_data direkt in Ihrer function verwenden können, die an die Aktion wp_enqueue_scripts angehängt ist.