Zmienić domyślny widok biblioteki multimediów w 3.5?

33

Czy podczas wstawiania multimediów do postu można zmienić domyślny widok Biblioteki multimediów z „Wszystkie elementy multimedialne” na „Przesłano do tego postu”?

pożyczony zrzut ekranu

Jest inny wątek, z którego pochodzi to pytanie: Jak zarządzać relacjami między załącznikami

div
źródło
Czy próbowałeś wyłączyć wszystkie inne wtyczki, wrócić do domyślnego motywu, a następnie aktywować ten z toscho? Może to być konflikt JS.
kaiser

Odpowiedzi:

22

W mojej poprzedniej odpowiedzi były dwa drobne błędy:

  1. Zapomniałem uruchomić changezdarzenia dla rodzica.
  2. Wywołałem tę funkcję przy każdym wywołaniu AJAX, co uniemożliwia wybór innych opcji.

Oto poprawiony kod:

<?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
}
fuxia
źródło
Dziękuję bardzo, toscho! <br> Upuszczony tutaj kod wtyczki działa teraz dla mnie jak urok! (byłoby miło, gdyby ktoś mógł przekształcić tę „odpowiedź” w komentarz i ustawić status na odpowiedź)
dz.
Jesteś jedynym, który może zaznaczyć znacznik wyboru odpowiedzi . Musisz użyć konta, o które prosiłeś. Połączyłem oba konta, teraz powinieneś być w stanie zaznaczyć znacznik wyboru. :)
fuxia
3
Ten bardzo elegancki kod działa po kliknięciu Add Mediaprzycisku, ale nie po kliknięciu przycisku Set featured image. Czy istnieje sposób, aby tam też działał?
Christine Cooper
Działa w moim systemie również w przypadku polecanych obrazów.
fuxia
1
Ma to potencjalny problem, wygląda na to, że wybierasz wszystko , co ma wartość = przesłano. Ponadto, jeśli chcesz dodać javascript do inicjalizacji każdego programu do przesyłania, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});byłoby bardziej odpowiednie.
NoBugs,
13

Jedyny problem z JS powyżej, który przełącza pole wyboru, aby wywołać zmianę po załadowaniu strony i po rozpoczęciu pobierania WSZYSTKICH POZYCJI MEDIALNYCH. Dla mojego klienta na wolnym T1 to się zamknęło, ponieważ pobierało zarówno WSZYSTKIE CZASY MEDIALNE, jak i PRZESŁANE DO TEGO POSTU.

Miałem trochę pomocy od wspaniałego Sewpafly, który opracowuje wtyczkę Post Thumbnail Editor . udostępnił świetny fragment JS, który domyślnie zapobiega ładowaniu WSZYSTKICH POZYCJI MEDIOWYCH i zmusza go do ładowania tylko obrazów „WYSŁANE DO TEGO POSTU”.

Kod

Plik: 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);
        }
    });
});

Plik: funkcje.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');
}

Ten sam kod na GitHub: https://gist.github.com/fishnyc22/5593693

Upuściłem to do pliku JS i wywołałem go w functions.php za pomocą skryptów admin_enqueue_scripts. Zobacz GIST powyżej dla PHP i JS.

Działa doskonale. Mam nadzieję, że świetni ludzie WordPressa naprawią to w nadchodzącej aktualizacji, ale na razie Sewpafly ma najlepsze rozwiązanie, jakie znalazłem. Jeszcze raz dziękuję kolego.

Powinienem zauważyć, że właśnie odkryłem, że przeglądarka domyślnie ma obrazy ŚREDNIEJ wielkości, które wyłączyłem (ustawiono na 0,0), ponieważ nie używałem i nie zapobiegałem wzdęciom. Gdy średni rozmiar nie jest dostępny, wordpress ładuje obraz PEŁNY rozmiar. Od tego czasu podałem włączony średni rozmiar.

Dave
źródło
niezwykle pomocne - czy można nie tylko ograniczyć liczbę obrazów wyświetlanych w bibliotece multimediów za pomocą pewnego rodzaju haka?
Innate
Osobiście lubię również dodawać ten CSS, który ukryje menu rozwijane mediów: pastebin.com/1dP6SR4g
Howdy_McGee
1
Niestety w tym rozwiązaniu występuje jeden poważny problem. Wykonaj następujące czynności: 1. Otwórz wpis na ekranie po edycji. 2. Kliknij link „Ustaw polecany obraz” (przed kliknięciem przycisku Dodaj multimedia). 3. Kod działa do tej pory dobrze. Teraz zamknij okno, a następnie kliknij przycisk Dodaj multimedia. Zobaczysz, że opcja „Wszystkie media” jest zaznaczona, ale wyświetla przesłane. Aby przełączyć na wszystkie obrazy, musisz przełączyć na przesłane, a następnie z powrotem na wszystkie media. Czy ktoś ma rozwiązanie tego problemu? Mimo wszystko dziękuję.
Christine Cooper
4

@ toscho Ach, znalazłem błąd w twoim kodzie. Proszę zostań ze mną. Wykonaj dokładnie następujące czynności, aby odtworzyć problem:

1) Otwórz wersję roboczą.

2) Kliknij Add Mediaprzycisk. Poczekaj na załadowanie funkcji jQuery.

3) Po lewej stronie kliknij Set Featured Imagelink.

4) Teraz zamknij okno wyskakujące Media i na stronie edycji postów kliknij Set featured imagelink na prawym pasku bocznym.

5) Zobaczysz, że funkcja jQuery nie będzie działać.

Jednak gdybyś kliknął Set featured imagelink najpierw przy ładowaniu po edycji, funkcja działałaby. Czy możesz powtórzyć ten problem i ewentualnie znaleźć rozwiązanie? Jeszcze raz przepraszam za opublikowanie tego jako odpowiedzi, ale ta platforma nie oferuje mi obecnie lepszej opcji.

EDYCJA: Czy ktoś może powiadomić toscho o tym. Możesz to zrobić, dodając komentarz do jego odpowiedzi, który moim zdaniem powinien dać mu powiadomienie. Nie mogę pisać komentarzy, ponieważ nie mam wystarczającej reputacji ...

EDYCJA 2 : Jeśli chcesz desperacko uniknąć tego problemu, możesz usunąć link „Ustaw polecany obraz” w wyskakującym okienku i zmusić użytkownika do korzystania z linku na pasku bocznym (podobnie jak wersje WP wcześniejsze niż 3.5). Użyj tego filtra, który został wprowadzony w WP 3.5:

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

Jak powiedziałem, jest to desperacka poprawka, dopóki nie zostanie opublikowane rozwiązanie dla głównego kodu.

Christine Cooper
źródło
Jestem tego świadomy, po prostu nie mam czasu na rozszerzenie wtyczki.
fuxia
Rozumiem, że jeśli w najbliższej przyszłości znajdziesz czas na jego przedłużenie, wszyscy będziemy wdzięczni.
Christine Cooper
Zaktualizowałem tę odpowiedź „słowem” dla zdesperowanych. toscho, możesz dodać to do swojej odpowiedzi, jeśli chcesz ...
Christine Cooper
2

Najważniejsze, że nie podobało mi się większość tych rozwiązań, to że migało na wielu ekranach, a jeśli klikniesz Wyróżniony obraz , wróci do wyświetlania wszystkich obrazów. Po kilku poszukiwaniach myślę, że znalazłem trwałe rozwiązanie (dzięki Ünsal Korkmaz ), które wygląda jakby rozwiązało te problemy. Kod:

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 
}

co na stałe ustawia bibliotekę multimediów, aby wyświetlała tylko „Przesłano do tego postu”, nawet jeśli spróbujesz zmienić widok, co oznacza brak mrugania.

Dodałem ten kod, aby mu towarzyszyć, aby całkowicie usunąć pole wyboru:

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
}
Howdy_McGee
źródło
2

Nowe wersje wordpress używają innego podejścia (zaawansowane Backbonejs ) do programu do przesyłania mediów; Sprawdź kod z tej wtyczki, ponieważ działa ona dla nowych wersji WordPress.

numediaweb
źródło
2
Byłoby miło, gdybyś rzeczywiście udostępnił kod - nie tylko link.
Kaiser
0

To są moje rozwiązania, które należy ustawić dateFilterna bieżący miesiąc, chociaż uruchamia AJAX dwukrotnie.

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