2016-08-04 8 views
0

Ich versuche, eine WordPress 4.5.3 jQuery UI-Dialog zu implementieren, aber es funktioniert nur etwa die Hälfte der Zeit. Der Rest der Zeit, die ich die folgende Fehlermeldung erhalten:jQuery-UI-Dialog - Uncaught TypeError in Wordpress

Uncaught TypeError: jQuery(...).dialog is not a function lwr_jquery_dialog.js(2) 

ich die Skripte die Warteschlange eingereiht haben sich wie folgt, und überprüft sie auf der Seite in der richtigen Reihenfolge zu laden:

function enqueue_jquery_dialog() { 

    wp_enqueue_script('jquery-ui-dialog', false, array('jquery','jquery-ui-core'), 
     false, true); 
    wp_enqueue_script('lwr_dialog', get_stylesheet_directory_uri() . 
     '/js/lwr_jquery_dialog.js', array('jquery-ui-dialog'));   
} 
add_action('wp_enqueue_scripts', 'enqueue_jquery_dialog'); 

In lwr_jquery_dialog.js I hat:

jQuery(document).ready(function() { 
    jQuery('#dialog').dialog({ 
     width: 600, 
     modal: true, 
     resizable: false, 
     draggable: false, 
    }); 
}); 

Und hier ist die eigentliche Dialog-Funktion in der functions.php

function add_jquery_dialog() { 
    ?> 
    <div id="dialog" title="Today Only"> 
      DIALOG TEXT HERE 
    </div> 
<?php 
} 
add_action('wp_footer', 'add_jquery_dialog'); 
+0

Die Hälfte der Zeit klingt wie ein Skript nicht in der richtigen Reihenfolge ist, und das passiert einfach so, um entweder das zweite Mal oder Lasten im Cache gespeichert werden just-in-time, die Sie nicht tun bemerke, dass es ein Problem beim ersten Mal ist. Überprüfen Sie die Reihenfolge Ihrer Skripts und stellen Sie sicher, dass jquery-UI nach der jQuery-Hauptbibliothek geladen wird. Wenn das nicht so ist, bleib offen, wenn du den Code noch einmal ansiehst - wenn es so etwas gibt, lass es mich wissen und ich werde eine Antwort darauf geben! – Jonathan

+0

Haben Sie versucht, die Priorität der add_action zu ändern? – j08691

+0

Versuchen Sie, jQuery auf $ –

Antwort

2

Update 1: Sie vermissen jquery-ui-dialog Skript. Versuchen Sie stattdessen:

add_action('wp_enqueue_scripts', function() 
{ 
    $theme_uri = get_stylesheet_directory_uri(); 

    wp_enqueue_script('lwr-jquery-dialog', $theme_uri . '/js/lwr_jquery_dialog.js', 
['jquery-ui-core', 'jquery-ui-dialog'], false, true); 
}, 10, 0); 

Da Sie verwenden false als Wert der Quelldatei werden die Abhängigkeiten nicht korrekt eingereiht. Siehe $src Parameter von wp_enqueue_script() Funktion für weitere Informationen.

Versuchen Sie folgendes:

add_action('wp_enqueue_scripts', function() 
{ 
    $theme_uri = get_stylesheet_directory_uri(); 

    wp_enqueue_script('lwr-jquery-dialog', $theme_uri . '/js/lwr_jquery_dialog.js', 
['jquery-core', 'jquery-ui-core'], false, true); 
}, 10, 0); 
+0

zu ändern. Auch wenn es fehlschlägt, habe ich in der HTML-Quelle verifiziert, dass die Dateien in der richtigen Reihenfolge geladen werden. Ich habe es versucht, aber ohne zusätzliches Glück. – dpruth

+0

@ dpruth Ich habe einen Test gemacht und die Antwort aktualisiert. Hoffe es klappt diesmal. – MinhTri

+0

Mein Skript oben enthält jquery-ui-dialog. Aber ich habe die wp_enqueue_script-Funktion mit Ihrem Vorschlag aktualisiert ("FALSE" herausnehmen) und es scheint jetzt zu funktionieren. Vielen Dank! – dpruth