Ändern Sie die Standardansicht der Medienbibliothek in 3.5?

Wenn Sie Medien in einen Post einfügen, gibt es eine Möglichkeit, die Standardansicht der Medienbibliothek von “Alle Medienelemente” auf “Auf diesen Post hochgeladen” zu ändern?

geliehener Screenshot

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

Solutions Collecting From Web of "Ändern Sie die Standardansicht der Medienbibliothek in 3.5?"

Es gab zwei kleinere Fehler in meiner vorherigen Antwort:

  1. Ich habe vergessen, das change für den Eltern auszulösen.
  2. Ich habe die function bei jedem AJAX-Anruf angerufen und andere Auswahlmöglichkeiten unmöglich gemacht.

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() { ?>  < ?php } 

Das einzige Problem mit dem obigen JS ist, dass es das Auswahlfeld so umschaltet, dass es die Änderung austriggers, nachdem die Seite geladen wurde und nachdem bereits begonnen wurde, ALLE MEDIENPUNKTE herunterzuladen. Für meinen Kunden auf einem langsamen T1 schloss dieser alles ab, da er sowohl die ALLEN MEDIENZEITEN als auch die AUF DIESEM POST HOCHGELADENEN Artikel zusammen lud.

Ich hatte Hilfe vom großartigen Sewpafly, der das Post Thumbnail Editor Plugin entwickelt. Er hat ein großartiges Stück JS geteilt, das das Laden ALLER MEDIUM-ITEMS verhindert und es zwang, nur Bilder zu laden, die standardmäßig auf diesen POST hochgeladen wurden.

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'); } 

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

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

functioniert hervorragend. Ich hoffe, dass die WordPress-Leute dies in einem kommenden Update beheben, aber im Moment hat Sewpafly die beste Lösung, die ich gefunden habe. Danke nochmal Kumpel.

Ich sollte bemerken, dass ich gerade festgestellt habe, dass der Viewer standardmäßig mittelgroße Bilder verwendet, die ich deaktiviert hatte (auf 0,0 gesetzt), da ich Bloat nicht verwendete und verhinderte. Wenn die mittlere Größe nicht verfügbar ist, lädt WordPress das Bild in voller Größe. Ich habe seitdem die mittlere Größe aktiviert.

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

1) Öffnen Sie einen Entwurfsposten.

2) Klicken Sie auf die Schaltfläche Add Media hinzufügen. Warten Sie, bis die jQuery-function geladen ist.

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

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

5) Sie werden sehen, dass die jQuery-function nicht funktioniert.

Wenn Sie jedoch bei der Post-Edit-Last zuerst auf den Link ” Set featured image geklickt hätten, würde die function funktionieren. Können Sie dieses Problem replizieren und möglicherweise eine Lösung finden? Es tut mir leid, dies erneut als Antwort zu veröffentlichen, aber diese Plattform bietet mir derzeit keine bessere Option.

EDIT: Kann jemand bitte toscho darüber wissen lassen. Sie können dies tun, indem Sie seiner Antwort einen Kommentar hinzufügen, von dem ich glaube, dass er ihm eine Benachrichtigung geben sollte. Ich kann keine Kommentare schreiben, da ich nicht genug Reputation habe …

EDIT 2 : Wenn Sie dieses Problem unbedingt vermeiden möchten, können Sie den Link “Set Featured Image” im Popup-Fenster entfernen und den Benutzer zwingen, den Sidebar-Link zu verwenden (wie 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 eine Lösung für den Hauptcode veröffentlicht wird.

Die Hauptsache, die ich an den meisten dieser Lösungen nicht mochte, war, dass sie auf vielen Bildschirmen blinkte, und wenn Sie auf ” Ausgewähltes Bild” klickten, wurde wieder alles angezeigt. Nach einigem Suchen habe ich eine dauerhafte Lösung gefunden (Danke an Ünskalkmaz ), die diese Probleme zu lösen scheint. 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() { ?>  < ?php } 

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

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

 add_action( 'admin_head', 'hide_select_ddl' ); function hide_select_ddl() { ?>  < ?php } 

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

Dies ist meine Lösung, um dateFilter auf den aktuellen Monat zu setzen, obwohl es zweimal AJAX austriggers.

 .on('content:render:browse', function(a, b) { var filter = a.toolbar.secondary.get('dateFilter'); if (filter.model) { filter.model.set(filter.filters[1].props); } })