Laden Sie jQuery UI .datepicker für ein WP-Frontend-Plugin

Lesezeit: 7 Minuten

Benutzer-Avatar
Greg

Erstens habe ich das Gefühl, dass ich den ganzen Stapel von Beiträgen in dieser Kategorie ungefähr 100 Mal gelesen habe. Während der Titel wie ein Duplikat klingt, meine ich wirklich, dass ich alle Lösungen, die ich gelesen habe, zu den gestellten Fragen bis hin zu der ganzen Verkettungssache mit WP 3.5+ ausprobiert habe.

Mein Skript funktioniert in WP hervorragend, wenn ich auf das eigentliche jquery-Skript und die URL verweise. Ich lese überall, dass dies eine schreckliche Art der Implementierung ist, also habe ich versucht, die integrierten WP-Bibliotheken und den No-Conflict-Wrapper zu verwenden. Ich führe WP 3.6 auf einer lokalen Barebone-InstandWP-Installation mit dem Standarddesign Twentythirteen und keinem anderen Plugin aus.

\\ Works great if I use these in WP 3.6
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>

Wie ich bereits sagte, versuche ich, das Richtige zu tun, also habe ich mit einer Reihe von Enqueue- und/oder (De-)Registrierungsoptionen experimentiert. Bisher ist es keinem gelungen:

  • Concatenate_scripts = falsch
  • jQuery (de)registrieren
  • Enqueue (mit den richtigen jQuery-Hooks, wie im Codex referenziert)

Natürlich schreibe ich das $ in jQuery um und so weiter; aber mein Problem scheint bergauf zu sein, wie mir die Firebug-Konsole sagt: Uncaught ReferenceError: jQuery is not defined

So, hier bin ich. Mein Code ist außerhalb von WP gut, aber ich kann ihn anscheinend nicht dazu bringen, ihn für ein Front-End-Plugin in WP mit guten Codierungspraktiken zu verwenden.

\\ Loading the JS library & CSS
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/redmond/jquery-ui.min.css" />

\\ Definition of the datepicker rule
<script>
$(".full_date").datepicker({
showOn: 'button',
buttonText: 'Here',
dateFormat: 'DD, dd MM yy',
altFormat: "yy-mm",
altField: ".year-month",
onClose: function (dateText, picker) {
    // getDate returns a js Date object
     var dateObject = $(this).datepicker("getDate");
    console.dir(dateObject);
    // Call Date object methods
    $("#date input").val(dateObject.getDate());
    $("#month input").val(dateObject.getMonth());
    $("#day input").val(dateObject.getDay());
    $("#year input").val(dateObject.getFullYear());
}
});
</script>

\\ Some HTML
<h1>Date Picker</h1>

<form class="date-picker">
<label>full date</label>
<input type="text" class="full_date" value="" />
    <label>year month</label>
<input type="text" class="year-month"/>
</form>
<p id="day">Day of the week: <input name="day" type="text"></input> </p>
<p id="month">Month: <input name="month" type="text"></input></p>
<p id="date">Date: <input name="date" type="text"></input></p>
<p id="year">Year: <input name="year" type="text"></input></p>

Wenn das hilft, habe ich das ganze Ding an jsFiddle

Bitte schön, könnten Sie bei der Syntax helfen, um den Code in WP 3.6+ richtig einzustellen?

Vielen Dank, dass Sie sich die Zeit genommen haben, dies durchzulesen. Greg

AKTUALISIEREN

Hier ist der aktualisierte Code. Ich habe immer noch einen Fehler: “Uncaught ReferenceError: jQuery is not defined”.

<?php
add_action('wp_enqueue_scripts', 'load_my_scripts');

function load_my_scripts(){
wp_enqueue_script('jquery-ui-datepicker', '/wp-includes/js/jquery/ui/jquery.ui.datepicker.min.js', array('jquery'));    
wp_register_style('date-picker', plugins_url('includes/jquery-ui-1.10.3.custom.min.css',__FILE__), true);
}
?>
<script type="text/javascript">
(function($) {
    $(document).ready(function($){
        $("#datepicker").datepicker();
    });
});
</script>
<p>Date: <input type="text" id="datepicker" /></p>

Hier könnt ihr es live sehen:

http://s146485761.onlinehome.fr/wp_dev/debugging-test/

Das vollständige Plugin ist hier

http://s146485761.onlinehome.fr/wp_dev/plugin_archive.zip

AKTUALISIERUNG 2

Nach einer Weile wurde mir klar, dass mit dem Code nichts falsch war, er musste nur 1 Ebene höher in meinem Plugin-Ordner platziert werden. Ich habe dieses “kugelsichere” Beispiel als Dummy-Plugin erstellt, von dem ich herausgefunden habe, dass die Snippets function & add_action im Stammverzeichnis des eplugin-Ordners sein müssen.

Falls das jemandem hilft, hier ist der Testcode, den ich verwendet habe:

<?php
   /*
   * Plugin Name: Hello World
   */
   add_filter( 'the_content', 'tfr_the_content' );
   function thisisonlyatest() {
      wp_enqueue_script('jquery-ui-datepicker');
      wp_enqueue_style('jquery-ui-datepicker','http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.1/themes/redmond/jquery-ui.min.css' );
   }
   add_action("wp_enqueue_scripts","thisisonlyatest");
   function tfr_the_content( $content ) {
      return $content . '<p><input type="text" id="datepicker" value=""/></p>';
   }
   ?>
   <script type="text/javascript">
   jQuery(document).ready(function() {
   jQuery('#datepicker').datepicker({
   dateFormat : 'yy-mm-dd'
   });
   });
   </script>

Erstellen Sie einen Ordner in Ihrem Plugin-Ordner. Erstellen Sie dort eine leere PHP-Datei und fügen Sie diesen Code ein. Starten Sie Ihre WordPress-Testinstanz und passen Sie sie von dort aus an Ihre Bedürfnisse an.

Vielen Dank für Ihre Hilfe, ich hoffe, dies wird auch anderen helfen

Greg

  • Auf welcher Seite fügst du das ein? schreibst du eigentlich <script src="http://code.jquery.com/jquery-1.9.1.js"></script> in die Seite?

    – Oh Gott warum

    2. August 2013 um 17:38 Uhr

  • Ja, ich habe die Plugin-Entwicklung von Grund auf als HTML-Seite gestartet. Daher die grundlegende http-Referenz. Aber mir ist klar, dass dies nicht der Weg ist, es einmal IN WordPress zu tun, daher meine offene Frage 🙂

    – Greg

    2. August 2013 um 21:02 Uhr

Benutzer-Avatar
Wunderdojo

Wenn Sie den obigen Code tatsächlich verwenden, besteht das Problem darin, dass $ kein jQuery-Objekt ist. Sie brauchen so etwas wie:

jQuery(document).ready(function($){

   /** your code

 });

Und wie die Person oben gesagt hat, codieren Sie jQuery nicht hart, sondern stellen Sie es in die Warteschlange. Nur zu Ihrer Information, jQuery Datepicker ist Teil des Kerns, aber die Stile dafür sind es nicht, also müssen Sie ein Stylesheet rollen und dieses einschließen.

Zum Beispiel (unter Verwendung des jQuery Themeroller Redmond-Stils):

add_action('wp_enqueue_scripts', 'load_my_scripts');

function load_my_scripts(){
wp_enqueue_script( 'jquery-ui-datepicker' );    
wp_register_style('date-picker', plugins_url('css/jquery-ui-redmond.css',__FILE__), true);
}

  • Auch beim Einreihen von Skripts in die Warteschlange empfiehlt es sich, festzulegen, ob es auf eine andere Bibliothek angewiesen ist oder nicht. In Anbetracht der Tatsache, dass jQuery Ui Datepicker jQuery erfordert, sollten Sie dies wahrscheinlich tun, wp_enqueue_script('jquery-ui-datepicker', 'path/to/my/jquery-ui-datepicker.js', array('jquery'))wo array('jquery') ist die Magie, die die meisten Menschen vermissen.

    – Oh Gott warum

    2. August 2013 um 17:49 Uhr

  • Guter Aufruf, aber soweit ich weiß, wird jQuery immer in die Warteschlange gestellt, sodass Sie es nicht wirklich als Abhängigkeit auflisten müssen, es sei denn, Sie benötigen eine bestimmte Version.

    – Wunderdojo

    2. August 2013 um 17:56 Uhr

  • Vielen Dank für Ihre Antworten. Wenn ich nur diesen Code in mein Plugin einfüge, wird jquery immer noch nicht geladen 🙁 Würde es zu Debugging-Zwecken helfen, wenn ich es von einem lokalen Server auf einen normalen verschiebe?

    – Greg

    2. August 2013 um 21:06 Uhr


  • Poste den vollständigen Plugin-Code, damit wir sehen können, wie du ihn tatsächlich aufrufst.

    – Wunderdojo

    2. August 2013 um 21:31 Uhr

  • Klar, hier bitte : s146485761.onlinehome.fr/wp_dev/plugin_archive.zip ; Der hier gepostete Code befindet sich in der Includes/Shortcode-Datei. Danke für Ihre Hilfe !

    – Greg

    2. August 2013 um 23:15 Uhr


Zum Laden von Balg-Skript und -Stil fügen Sie Balg-Code in der Datei „functions.php“ des Themas hinzu.

function add_e2_date_picker(){
//jQuery UI date picker file
wp_enqueue_script('jquery-ui-datepicker');
//jQuery UI theme css file
wp_enqueue_style('e2b-admin-ui-css','http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',false,"1.9.0",false);
}
add_action('wp_enqueue_scripts', 'add_e2_date_picker'); 

Skript für Backend-Nutzung:

function add_e2_date_picker(){
//jQuery UI date picker file
wp_enqueue_script('jquery-ui-datepicker');
//jQuery UI theme css file
wp_enqueue_style('e2b-admin-ui-css','http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.0/themes/base/jquery-ui.css',false,"1.9.0",false);
}
add_action('admin_enqueue_scripts', 'add_e2_date_picker'); 

Ich habe ‘options-general.php’ zur Anzeige auf Settigns->Date Picker hinzugefügt oder angehängt. Fügen Sie diesen Code einfach auch in die Datei functions.php ein oder unterhalb dieses Codes.

function register_datepiker_submenu() {
    add_submenu_page( 'options-general.php', 'Date Picker', 'Date Picker', 'manage_options', 'date-picker', 'datepiker_submenu_callback' );
}

function datepiker_submenu_callback() { ?>

    <div class="wrap">

    <input type="text" class="datepicker" name="datepicker" value=""/>

    </div>

    <script>
    jQuery(function() {
        jQuery( ".datepicker" ).datepicker({
            dateFormat : "dd-mm-yy"
        });
    });
    </script> 

<?php }
add_action('admin_menu', 'register_datepiker_submenu');

?>

Weitere Einzelheiten finden Sie unter Füge einen jQuery Date Picker zu WordPress Theme oder Plugin hinzu

1055230cookie-checkLaden Sie jQuery UI .datepicker für ein WP-Frontend-Plugin

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy