WordPress 3.5 benutzerdefinierter Medien-Upload für Ihre Theme-Optionen

Lesezeit: 6 Minuten

WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
Mattpx

WordPress 3.5 wurde vor kurzem veröffentlicht, ich habe das WordPress Media Upload-System über Thickbox verwendet und window.send_to_editor für einige Optionen in meinem WordPress-Theme (Hintergründe, Logos etc…).

Aber da WordPress einen neuen Media Manager integriert hat, wollte ich diese neue Funktion nutzen, um Bilder/Dateien als benutzerdefinierte Felder hochzuladen. Also verbrachte ich den Morgen damit, einen Weg zu finden, um das gewünschte Ergebnis zu erzielen.

Ich habe mit dieser Lösung gefunden, die für einige von Ihnen nützlich sein kann. Vielen Dank, dass Sie mir Ihr Feedback zum Code oder zu Verbesserungen geben, die Sie im Sinn haben!

HTML-Beispiel:

<a href="#" class="custom_media_upload">Upload</a>
<img class="custom_media_image" src="" />
<input class="custom_media_url" type="text" name="attachment_url" value="">
<input class="custom_media_id" type="text" name="attachment_id" value="">

jQuery-Code:

$('.custom_media_upload').click(function() {

    var send_attachment_bkp = wp.media.editor.send.attachment;

    wp.media.editor.send.attachment = function(props, attachment) {

        $('.custom_media_image').attr('src', attachment.url);
        $('.custom_media_url').val(attachment.url);
        $('.custom_media_id').val(attachment.id);

        wp.media.editor.send.attachment = send_attachment_bkp;
    }

    wp.media.editor.open();

    return false;
});

Wenn Sie alle Einstellungen sehen möchten, die in der attachment variabel kannst du a console.log(attachment) oder alert(attachment).

  • Der WordPress-Administrator verwendet noConflict, daher musste ich das $ -> jQuery ändern. Sehr hilfreich danke!

    – styks

    14. Dezember ’12 um 16:33

  • Tausend Dank für dieses knackige Beispiel! Die Übergabe einer Beitrags-ID ist so einfach wie die Übergabe als Parameter in wp.media.editor.open()

    – Jos Faber

    16. Dezember ’12 um 20:06

  • Ich frage mich, wie man die Medien-API als Abhängigkeit von einem Skript in lädt wp_enqueue_script(). ich weiß das wp_enqueue_media() gibt es, aber ich würde es vorziehen, Abhängigkeiten zu verwenden – gibt es eine Möglichkeit, dies zu tun?

    – Atadj

    24. Januar ’13 um 11:07

1642036504 75 WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
DiverseAndRemote.com

Sie gehen auf eine Weise vor, die nicht beabsichtigt war. Ihr Javascript-Code sollte wahrscheinlich so aussehen:

$('.custom_media_upload').click(function(e) {
    e.preventDefault();

    var custom_uploader = wp.media({
        title: 'Custom Title',
        button: {
            text: 'Custom Button Text'
        },
        multiple: false  // Set this to true to allow multiple files to be selected
    })
    .on('select', function() {
        var attachment = custom_uploader.state().get('selection').first().toJSON();
        $('.custom_media_image').attr('src', attachment.url);
        $('.custom_media_url').val(attachment.url);
        $('.custom_media_id').val(attachment.id);
    })
    .open();
});

  • Können Sie mir vorschlagen, wie ich die Medienbibliotheksoption aus dem Uploader entfernen kann?

    – Benutzer930026

    20. Juni ’13 um 12:14

  • custom_uploader.on('open', function(){...customize...}) ?

    – NoBugs

    3. August ’13 bei 4:46

  • kennt jemand eine vollständige Liste der Argumente dafür? wp.media()? Zum Beispiel hat es auch eine Bibliothek und es braucht Typ, aber ich möchte bestimmte IDs von den Auswahloptionen ausschließen.

    – Ciantic

    12. Dezember ’13 um 20:47

  • Es öffnet die Instanz 2 Mal, ich verstehe es nicht, warum ist das so? Danke

    – Herr Nentu’

    2. Januar ’14 um 15:16

  • Ich glaube nicht, dass die vollständige Liste der Argumente dokumentiert ist, aber wenn Sie möchten, können Sie sich den Code in ansehen wp-includes/js/media-views.js. Suchen Sie einfach nach “media.controller.Library =”

    – DiverseAndRemote.com

    22. Okt ’14 um 15:37


WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
Xaver

Vergiss nicht zu verwenden wp_enqueue_media (neu in 3.5) wenn du nicht auf der Beitragsbearbeitungsseite bist

Um die alte Medien-Upload-Box zu verwenden, können Sie dies tun:

if(function_exists( 'wp_enqueue_media' )){
    wp_enqueue_media();
}else{
    wp_enqueue_style('thickbox');
    wp_enqueue_script('media-upload');
    wp_enqueue_script('thickbox');
}

  • Ich frage mich, wie man die Medien-API als Abhängigkeit von einem Skript in lädt wp_enqueue_script(). ich weiß das wp_enqueue_media() gibt es, aber ich würde es vorziehen, Abhängigkeiten zu verwenden – gibt es eine Möglichkeit, dies zu tun? Ich suche nach Namen aller erforderlichen Bibliotheken – wie Sie es in Ihrem Beispiel mit Medienskripten vor WP3.5 tun.

    – Atadj

    24. Januar ’13 um 11:14

  • Überprüfen Sie am besten die Quelle, was genau in die Warteschlange eingereiht wird: core.trac.wordpress.org/browser/tags/3.5.1/wp-includes/…

    – Xaver

    13. Feb. ’13 um 10:42

WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
Phil Johnston

Ich habe diesen Code noch etwas modifiziert, um ihn für mehrere Felder gleichzeitig nutzbar zu machen:

HTML-Code:

<!-- Image Thumbnail -->
<img class="custom_media_image" src="" style="max-width:100px; float:left; margin: 0px     10px 0px 0px; display:inline-block;" />

<!-- Upload button and text field -->
<input class="custom_media_url" id="" type="text" name="" value="" style="margin-bottom:10px; clear:right;">
<a href="#" class="button custom_media_upload">Upload</a>

jQuery:

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

$('.custom_media_upload').click(function() {

        var send_attachment_bkp = wp.media.editor.send.attachment;
        var button = $(this);

        wp.media.editor.send.attachment = function(props, attachment) {

            $(button).prev().prev().attr('src', attachment.url);
            $(button).prev().val(attachment.url);

            wp.media.editor.send.attachment = send_attachment_bkp;
        }

        wp.media.editor.open(button);

        return false;       
    });

});

WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
Xaver

Ich habe nichts gefunden, um eine benutzerdefinierte Funktion auszulösen, wenn der Editor geschlossen wird. Ich verwende das:

wp.media.editor.open();
$('.media-modal-close, .media-modal-backdrop').one('click', function(){
    //do some stuff
});

oder besser:

var id = wp.media.editor.id();
var editor = wp.media.editor.get( id );
if('undefined' != typeof( editor )) editor = wp.media.editor.add( id );

if ( editor ) {
    editor.on('close', function(){
        //do some stuff
    });
}

1642036504 670 WordPress 35 benutzerdefinierter Medien Upload fur Ihre Theme Optionen
markieren

Ich hatte nicht viel Gelegenheit, damit zu spielen, aber für diejenigen, die das Galerie-Element nutzen möchten, sollte dieser Code Sie auf den Weg bringen.

Es ist nur ein Ausgangspunkt – es bietet nur eine durch Kommas getrennte Liste von Bild-IDs, aber das sollte ausreichen, um kreativ zu werden.

<input id="custom_media_id" type="text" name="attachment_id" value="">
<a href="#" class="button custom_media_upload" title="Add Media">Add Media</a>

<script type="text/javascript">
  jQuery('.custom_media_upload').click(function() {
    var clone = wp.media.gallery.shortcode;
    wp.media.gallery.shortcode = function(attachments) {
    images = attachments.pluck('id');
    jQuery('#custom_media_id').val(images);
    wp.media.gallery.shortcode = clone;
    var shortcode= new Object();
    shortcode.string = function() {return ''};
    return shortcode;
  }
jQuery(this).blur(); // For Opera. See: http://core.trac.wordpress.org/ticket/22445
wp.media.editor.open();
return false;       
});
</script>

Dadurch wird das Eingabefeld mit einer durch Kommas getrennten Liste der Bild-IDs in der Reihenfolge gefüllt, in der sie im Editor festgelegt wurden (unter Verwendung der neuen Drag-and-Drop-Funktionalität).

Die Funktion erwartet, dass der Shortcode zur Platzierung im Haupteditor zurückgesendet wird, aber wir möchten dies nicht tun, also erstellen wir ein neues Objekt, das eine leere Zeichenfolge zum Einfügen zurückgibt.

Beachten Sie auch, dass dies nicht das Einfügen eines einzelnen Bildes wie oben beschrieben behandelt – es wird nur in den Post-Editor eingefügt. Versuchen Sie also, die beiden Listener zu kombinieren, oder entfernen Sie die entsprechenden Registerkarten.

BEARBEITEN

Nachdem ich einige Zeit damit verbracht habe, den Kern zu betrachten, denke ich, dass dieser ganze Prozess mit der hier beschriebenen Technik tatsächlich einfacher durchgeführt werden kann, aber wie Sie lesen werden, habe ich noch nicht herausgefunden, wie Sie die Bilder beim erneuten Öffnen vorselektieren Medien-Manager.

.

479620cookie-checkWordPress 3.5 benutzerdefinierter Medien-Upload für Ihre Theme-Optionen

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

Privacy policy