it-swarm.com.de

Ändern Sie die Standardansicht der Medienbibliothek in 3.5?

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?

borrowed Screenshot

Es gibt einen anderen Thread, aus dem diese Frage extrahiert wurde: Verwalten von Anhangsbeziehungen

33
div

In meiner vorherigen Antwort gab es zwei kleine Fehler:

  1. Ich habe vergessen, das Ereignis change für die Eltern auszulösen.
  2. Ich habe die Funktion bei jedem Aufruf von AJAX 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
}
22
fuxia

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 UPLOADED TO THIS POST -Elemente zusammen heruntergeladen wurden.

Ich hatte Hilfe vom großen 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, nur Bilder zu laden, die standardmäßig "AUF DIESEN POST GELADEN" 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 sowohl für PHP als auch für JS.

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

Ich sollte beachten, dass ich gerade festgestellt habe, dass der Viewer standardmäßig Bilder mittlerer Größe anzeigt, die ich deaktiviert (auf 0,0 eingestellt) hatte, da ich kein Aufblähen verwendet und verhindert habe. 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.

13
dave

@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 Schaltfläche Add Media. Warten Sie, bis die jQuery-Funktion geladen ist.

3) Klicken Sie links auf den Link Set Featured Image.

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

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

Wenn Sie jedoch beim Laden nach der Bearbeitung zuerst auf den Link Set featured image geklickt hätten, würde die Funktion funktionieren. Können Sie dieses Problem replizieren und möglicherweise eine Lösung finden? Es tut mir leid, dass ich dies als Antwort gepostet habe, aber diese Plattform bietet mir derzeit keine bessere Option.

EDIT: Kann jemand bitte toscho 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 vor WP Versionen) 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.

4

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

2
numediaweb

Das Wichtigste, was mir an den meisten dieser Lösungen nicht gefallen hat, ist, dass sie auf vielen Bildschirmen blinkten und wenn Sie auf Ausgewähltes Bild klickten, wurden 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 permanent 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
Howdy_McGee

Dies ist meine Lösung, um dateFilter auf den aktuellen Monat zu setzen, obwohl es zweimal AJAX 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);
  }
})
0
Eilluj