Der Aufruf von wp_enqueue_media() in einem benutzerdefinierten Design-Widget auf WordPress 3.5.x verursacht einen js-Fehler

Lesezeit: 3 Minuten

Benutzer-Avatar
Simon Conti

Ich schreibe ein benutzerdefiniertes Widget für mein eigenes WordPress-Theme.

Ab WordPress 3.5 gibt es statt der alten ThickBox einen neuen Media Uploader.

Mein Widget hat früher auf WordPress-Versionen älter als 3.5 einwandfrei funktioniert, aber jetzt verhindert der neue Medien-Uploader das alte Arbeitsverhalten.

Ich habe im Costructor eine Überprüfung auf das Vorhandensein von hinzugefügt wp_enqueue_media Funktion:

if( function_exists( 'wp_enqueue_media' ) ) {
    wp_enqueue_media();
}

aber wenn dieser Teil von cose ausgeführt wird, löst Javascript einen Fehler in der Konsole aus, der die Js-Engine stoppt:

Uncaught TypeError: Cannot read property 'id' of undefined    load-scripts.php:69

Ich habe den gesamten Widget-Code entfernt und auf das Nötigste reduziert … der Fehler wird durch Aufrufe von wp_enqueue_media() verursacht, aber ich kann mir nicht erklären, warum und wie ich ihn beheben kann.

Ich habe auch den benutzerdefinierten Medien-Upload von WordPress 3.5 für Ihre Themenoptionen gelesen, aber dieses Problem wird nicht erwähnt

Kann mich jemand in die richtige Richtung weisen? Gibt es eine Dokumentation für den WordPress 3.5 Media Uploader?

  • Ich erlebe dasselbe, aber mit einer anderen Fehlermeldung: Uncaught TypeError: Cannot read property ‘length’ of undefined jquery.js:2

    – Donny Kurnia

    19. Februar 2013 um 14:50 Uhr


Für dich ist es jetzt zu spät, aber vielleicht hilft es anderen. Ich habe es geschafft, es zum Laufen zu bringen

add_action( 'admin_enqueue_scripts', 'wp_enqueue_media' );

Ich hoffe es hilft!

Das Problem, auf das Sie stoßen, liegt darin, dass Sie wahrscheinlich Ihre benutzerdefinierte jquery in den Header eingefügt und keine WordPress-jquery registriert haben. Wenn mehrere Jquery definiert sind, erhalten Sie diesen Fehler.

Mein Vorschlag ist, dass Sie entweder Ihr jquery-Skript oder das aus WordPress entfernen sollten

function remove_jquery() {

wp_deregister_script('jquery');
//wp_register_script('jquery', ("//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"), false);

}

if(!is_admin()){add_action('init', 'remove_jquery');}

Ich schlage vor, dass Sie die jquery WordPress verwenden, die Ihnen zur Verfügung steht, wenn nicht, ist der richtige Weg, sie in die Warteschlange einzureihen, die Standard-Eine zu deregistrieren und Ihre jquery zu registrieren. Entfernen Sie einfach die Kommentare aus der Funktion remove_jquery.

Außerdem sollte der obige Code in die functions.php eingefügt werden

Prost.

  • Tut mir leid, aber das ist nicht das, was ich tue: Ich verwende IMMER von WordPress bereitgestellte Js-Bibliotheken, falls vorhanden.

    – Simone Conti

    1. April 2013 um 14:11 Uhr

  • Versucht. Ich hatte das gleiche Problem und suchte nach einer Lösung, und am Ende stellte ich fest, dass jquery auch benutzerdefiniert in den Header eingebettet war. Deshalb habe ich geantwortet, dachte, Sie hätten das gleiche Problem 🙂 Wenn Ihr Widget mit dem letzten funktioniert hat, stellen Sie außerdem sicher, dass Sie die Skripte nicht verdoppeln. Die alte Methode bestand darin, verschiedene Skripte einzureihen, jetzt macht wp_enqueue_media() alles Sie. Wenn von den alten Medien noch etwas zum Arbeiten übrig war, ist das vielleicht das Problem 🙂

    – Eek

    1. April 2013 um 18:12 Uhr


  • Danke @eek ich wühle mich durch das Theme, Widget und Plugins… vielleicht ist ja noch was dabei…

    – Simone Conti

    5. April 2013 um 13:55 Uhr


  • Wenn Sie mir eine URL geben können, kann ich vielleicht ein Auge darauf werfen 🙂

    – Eek

    8. April 2013 um 18:10 Uhr

Aus Kodex [1]die Funktion wp_enqueue_media( $args ) sollte vom Aktionshaken ‘admin_equeue_scripts’ aufgerufen werden. oder später.

Beispiel:

function enqueue_media() {
    if( function_exists( 'wp_enqueue_media' ) ) {
        wp_enqueue_media();
    }
}

add_action('admin_enqueue_scripts', 'enqueue_media');

Hoffe es hat geholfen.

[1]. https://codex.wordpress.org/Function_Reference/wp_enqueue_media

Zum Debuggen müssen Sie die nicht minimierten Versionen der js abrufen, die an den Browser gesendet werden. Siehe die Dokumente:

SCRIPT_DEBUG

SCRIPT_DEBUG ist eine verwandte Konstante, die WordPress dazu zwingt, die „dev“-Versionen der Kern-CSS- und Javascript-Dateien zu verwenden, anstatt der minimierten Versionen, die normalerweise geladen werden. Dies ist nützlich, wenn Sie Änderungen an integrierten .js- oder .css-Dateien testen. Standard ist falsch.

define('SCRIPT_DEBUG', true);

1109840cookie-checkDer Aufruf von wp_enqueue_media() in einem benutzerdefinierten Design-Widget auf WordPress 3.5.x verursacht einen js-Fehler

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

Privacy policy