Ändern Sie die Standardansicht der Medienbibliothek in 3.5?


33

Gibt es eine Möglichkeit, beim Einfügen von Medien in einen Beitrag die Standardansicht der Medienbibliothek von "Alle Medienelemente" in "In diesen Beitrag hochgeladen" zu ändern?

geliehener Screenshot

Es gibt einen anderen Thread, aus dem diese Frage extrahiert wurde: Wie man Anhangsbeziehungen verwaltet


Haben Sie versucht, alle anderen Plugins auszuschalten, zum Standarddesign zurückzukehren und dann nur das von toscho zu aktivieren? Könnte ein JS-Konflikt sein.
Kaiser

Antworten:


22

In meiner vorherigen Antwort gab es zwei kleine Fehler:

  1. Ich habe vergessen, das changeEreignis für die Eltern auszulösen .
  2. Ich habe die Funktion bei jedem AJAX-Aufruf aufgerufen, wodurch andere Auswahlen unmöglich wurden.

Hier ist der feste Code:

<?php
/**
 * Plugin Name: Pre-select post specific attachments
 */

add_action( 'admin_footer-post-new.php', 'wpse_76048_script' );
add_action( 'admin_footer-post.php', 'wpse_76048_script' );

function wpse_76048_script()
{
    ?>
<script>
jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
});
</script>
    <?php
}

Vielen Dank, toscho! <br> Der Plugin-Code, den du hier abgelegt hast, wirkt jetzt wie ein Zauber für mich! (Es wäre schön, wenn jemand diese "Antwort" in einen Kommentar umwandeln und den Status auf "beantwortet" setzen könnte.)
Div

Sie sind der einzige, der das Antwort- Häkchen setzen kann. Sie müssen das Konto verwenden, mit dem Sie gefragt haben. Nachdem ich beide Konten zusammengeführt habe, sollten Sie jetzt in der Lage sein, das Häkchen zu setzen. :)
fuxia

3
Dieser sehr elegante Code funktioniert, wenn Sie auf die Add MediaSchaltfläche klicken , nicht jedoch, wenn Sie auf die Schaltfläche klicken Set featured image. Gibt es eine Möglichkeit, es auch dort zum Laufen zu bringen?
Christine Cooper

Es funktioniert auf meinem System auch für vorgestellte Bilder.
fuxia

1
Dies hat ein potenzielles Problem, es sieht so aus, als würden Sie alles auswählen, was value = uploaded hat. Wenn Sie der Initialisierung jedes Uploaders JavaScript hinzufügen wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});möchten, ist dies sinnvoller.
NoBugs

13

Das einzige Problem mit dem obigen JS ist, dass es das Auswahlfeld umschaltet, um die Änderung auszulösen, nachdem die Seite geladen wurde und nachdem bereits begonnen wurde, ALLE MEDIEN-EINZELTEILE herunterzuladen. Für meinen Client auf einem langsamen T1 wurde dies blockiert, da sowohl die ALL MEDIA TIMES- als auch die AUF DIESEN POST HOCHGELADENEN Elemente zusammen heruntergeladen wurden.

Ich hatte Hilfe von dem großartigen Sewpafly, der das Post Thumbnail Editor Plugin entwickelt. Er hat ein großartiges Stück JS geteilt, das das Laden von ALLEN MEDIA-EINZELTEILEN verhindert und es zwingt, standardmäßig nur Bilder zu laden, die "AUF DIESEN POST HOCHGELADEN" sind.

Der Code

Datei: myadmin.js

jQuery(function($) {
    var called = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == called ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            called = 1;
        }
    });
  var oldPost = wp.media.view.MediaFrame.Post;
    wp.media.view.MediaFrame.Post = oldPost.extend({
        initialize: function() {
            oldPost.prototype.initialize.apply( this, arguments );
            this.states.get('insert').get('library').props.set('uploadedTo', wp.media.view.settings.post.id);
        }
    });
});

Datei: functions.php

add_action('admin_enqueue_scripts', 'add_admin_js');
function add_admin_js() {
    wp_enqueue_script('admin_js', get_bloginfo( 'template_directory' ) . '/js/admin.js');
}

Derselbe Code auf GitHub: https://gist.github.com/fishnyc22/5593693

Ich habe das in eine JS-Datei gelegt und in functions.php mit den admin_enqueue_scripts aufgerufen. Siehe GIST oben für PHP und JS.

Funktioniert hervorragend. Hoffentlich beheben die guten WordPress-Leute dies in einem kommenden Update, aber Sewpafly hat vorerst die beste Lösung, die ich gefunden habe. Nochmals vielen Dank Kumpel.

Ich sollte beachten, dass ich gerade herausgefunden habe, dass der Viewer standardmäßig Bilder mittlerer Größe anzeigt, die ich deaktiviert hatte (auf 0,0 eingestellt), da ich kein Aufblähen verwendet und verhindert hatte. Wenn die mittlere Größe nicht verfügbar ist, lädt WordPress das Bild in voller Größe. Ich habe da in aktiviert die mittlere Größe angegeben.


extrem hilfreich - kann man nicht einfach die Anzahl der Bilder, die in der Medienbibliothek angezeigt werden, mit einer Art Haken begrenzen?
Innate

Ich persönlich mag auch diese CSS hinzuzufügen , die die Medien Dropdown verstecken: pastebin.com/1dP6SR4g
Howdy_McGee

1
Leider leidet diese Lösung an einem Hauptproblem. Gehen Sie wie folgt vor: 1. Öffnen Sie einen Beitrag im Nachbearbeitungsbildschirm. 2. Klicken Sie auf den Link "Ausgewähltes Bild festlegen" (bevor Sie auf die Schaltfläche Medien hinzufügen klicken). 3. Der Code funktioniert soweit einwandfrei. Schließen Sie nun das Fenster und klicken Sie auf die Schaltfläche Add Media. Sie werden sehen , dass die „Alle Medien“ Option ausgewählt ist , aber es ist die hochgeladenen Anzeige. Um zu allen Bildern zu wechseln, müssen Sie zum Hochladen und dann zurück zu allen Medien wechseln. Hat jemand eine Lösung für dieses Problem? Trotzdem vielen Dank dafür.
Christine Cooper

4

@toscho Ah, ich habe einen Fehler in deinem Code gefunden. Bitte entblößen Sie mich. Führen Sie genau die folgenden Schritte aus, um das Problem zu replizieren:

1) Öffnen Sie einen Beitragsentwurf.

2) Klicken Sie auf die Add MediaSchaltfläche. Warten Sie, bis die jQuery-Funktion geladen ist.

3) Klicken Sie links auf den Set Featured ImageLink.

4) Schließen Sie nun das Medien-Popup-Fenster und klicken Sie auf der Nachbearbeitungsseite auf den Set featured imageLink in der rechten Seitenleiste.

5) Sie werden feststellen, dass die jQuery-Funktion nicht funktioniert.

Wenn Sie jedoch beim Set featured imageLaden nach der Bearbeitung zuerst auf den Link geklickt hätten, würde die Funktion funktionieren. Können Sie dieses Problem wiederholen und möglicherweise eine Lösung finden? Entschuldigen Sie noch einmal, dass Sie dies als Antwort gepostet haben, aber diese Plattform bietet mir derzeit keine bessere Option.

EDIT: Kann bitte jemand toscho lassen darüber Bescheid wissen. Sie können dies tun, indem Sie seiner Antwort einen Kommentar hinzufügen, den er meines Erachtens benachrichtigen sollte. Ich kann keine Kommentare schreiben, da ich nicht genug Reputation habe ...

BEARBEITEN 2 : Wenn Sie dieses Problem unbedingt vermeiden möchten, können Sie den Link "Ausgewähltes Bild festlegen" im Popup entfernen und den Benutzer zwingen, den Sidebar-Link zu verwenden (wie bei WP-Versionen vor 3.5). Verwenden Sie diesen Filter, der in WP 3.5 eingeführt wurde:

add_filter( 'media_view_strings', 'cor_media_view_strings' );
/**
 * @see wp-includes|media.php
 */
function cor_media_view_strings( $strings ) {
    unset( $strings['setFeaturedImageTitle'] );
    return $strings;
}

Wie gesagt, dies ist eine verzweifelte Lösung, bis es eine Lösung für den Hauptcode gibt.


Mir ist dies bewusst, ich habe einfach keine Zeit, das Plugin zu erweitern.
fuxia

Ich verstehe, wenn Sie in naher Zukunft die Zeit finden würden, sie zu verlängern, wären wir alle dankbar.
Christine Cooper

Ich habe diese Antwort mit einem "Wordaround" für die Verzweifelten aktualisiert . toscho können Sie dies zu Ihrer Antwort hinzufügen, wenn Sie möchten ...
Christine Cooper

2

Das Wichtigste, was mir an den meisten dieser Lösungen nicht gefallen hat, ist, dass sie auf vielen Bildschirmen blinkten. Wenn Sie auf " Ausgewähltes Bild" klicken, werden wieder alle Bilder angezeigt . Nach einigem Suchen finde ich eine dauerhafte Lösung (Danke an Ünsal Korkmaz ), die so aussieht, als ob sie diese Probleme löst. Der Code:

add_action( 'admin_footer-post-new.php', 'media_library_filter' );
add_action( 'admin_footer-post.php', 'media_library_filter' );
function media_library_filter() { 
    ?>
    <script type="text/javascript">
        jQuery(document).on("DOMNodeInserted", function(){
            jQuery('select.attachment-filters [value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
        });
    </script>
    <?php 
}

Dadurch wird die Medienbibliothek dauerhaft so eingestellt, dass nur "In diesen Beitrag hochgeladen" angezeigt wird, auch wenn Sie versuchen, die Ansicht zu ändern, was bedeutet, dass nicht blinkt.

Ich habe diesen Code hinzugefügt, um die Auswahlbox vollständig zu entfernen:

add_action( 'admin_head', 'hide_select_ddl' );
function hide_select_ddl()
{
    ?>
<style type="text/css">
    div.media-menu a.media-menu-item:nth-child(3) {display:none!important;}
    .media-frame-content .attachment-filters:first-child {
        display:none;
    }
</style>
    <?php
}

2

Die neuen Versionen von WordPress verwenden einen anderen Ansatz (erweiterte Backbonejs ) für den Medien-Uploader. Überprüfen Sie den Code von diesem Plugin, da er für neue Versionen von WordPress funktioniert.


2
Wäre schön gewesen, wenn du den Code tatsächlich geteilt hättest - nicht nur einen Link.
Kaiser

0

Dies ist meine Lösung, um dateFilterauf den aktuellen Monat zu setzen, obwohl es AJAX zweimal auslöst.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.