Modificare la visualizzazione predefinita di Libreria multimediale in 3.5?


33

Quando si inseriscono file multimediali in un post, esiste un modo per modificare la visualizzazione predefinita della libreria multimediale da "Tutti gli elementi multimediali" a "Caricato in questo post"?

Screenshot preso in prestito

C'è un altro thread da cui è stata estratta questa domanda: Come gestire le relazioni di attaccamento


Hai provato a spegnere tutti gli altri plugin, a tornare al tema predefinito e quindi ad attivare quello di toscho? Potrebbe essere un conflitto di JS.
Kaiser

Risposte:


22

Ci sono stati due errori minori nella mia risposta precedente:

  1. Ho dimenticato di attivare l' changeevento per il genitore.
  2. Ho chiamato la funzione su ogni chiamata AJAX, rendendo impossibile altre selezioni.

Ecco il codice fisso:

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

Grazie mille, toscho! <br> Il codice plug-in che hai lasciato cadere qui funziona come un incantesimo per me adesso! (sarebbe bello se qualcuno potesse convertire questa "risposta" in un commento e impostare lo stato in cui rispondere)
div

Sei l'unico che può spuntare il segno di spunta della risposta . Devi usare l'account che hai usato per chiedere. Ho unito entrambi gli account, dovresti essere in grado di spuntare il segno di spunta ora. :)
fuxia

3
Questo codice molto elegante funziona quando si fa clic sul Add Mediapulsante ma non quando si fa clic su Set featured image. C'è un modo per farlo funzionare anche lì?
Christine Cooper

Funziona sul mio sistema anche per le immagini in primo piano.
fuxia

1
Questo ha un potenziale problema, sembra che tu stia selezionando tutto ciò che ha valore = caricato. Inoltre, se si desidera aggiungere javascript all'inizializzazione di ogni uploader, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});sarebbe più appropriato.
NoBugs

13

L'unico problema con JS sopra che attiva o disattiva la casella di selezione per attivare la modifica dopo il caricamento della pagina e dopo che è già iniziato a scaricare TUTTI GLI ARTICOLI MEDIA. Per il mio cliente su un T1 lento questo ha bloccato le cose mentre scaricava contemporaneamente sia gli TUTTI I TEMPI MEDIA sia i CARICATI A QUESTO POST.

Ho avuto l'aiuto del grande Sewpafly che sviluppa il plugin Post Thumbnail Editor . ha condiviso un ottimo pezzo di JS che impedisce il caricamento di TUTTI GLI ARTICOLI MEDIA e lo costringe a caricare solo le immagini "CARICATE SU QUESTO POSTO" per impostazione predefinita.

Il codice

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

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

Lo stesso codice su GitHub: https://gist.github.com/fishnyc22/5593693

L'ho lasciato cadere in un file JS e l'ho chiamato in Functions.php con admin_enqueue_scripts. Vedi GIST sopra sia per PHP che per JS.

Funziona brillantemente. Spero che i bravi wordpress lo risolvano in un prossimo aggiornamento, ma per ora Sewpafly ha la migliore soluzione che ho trovato. Grazie ancora amico.

Devo notare che ho appena scoperto che il visualizzatore utilizza per impostazione predefinita le immagini di dimensioni MEDIE che avevo disabilitato (impostato su 0,0) poiché non stavo usando e impedendo il gonfiamento. Quando la dimensione media non è disponibile, wordpress carica l'immagine di dimensione COMPLETA. Da allora ho dato in abilitato le dimensioni medie.


estremamente utile: non si può semplicemente limitare il numero di immagini visualizzate nella libreria multimediale con un qualche tipo di hook?
Innato

Personalmente, mi piace anche aggiungere questo CSS che nasconderà il menu a discesa dei media: pastebin.com/1dP6SR4g
Howdy_McGee

1
Sfortunatamente, questa soluzione presenta un grosso problema. Procedi come segue: 1. Apri un post nella schermata di post modifica. 2. Fare clic sul collegamento "Imposta immagine in primo piano" (prima di fare clic sul pulsante Aggiungi file multimediale). 3. Il codice funziona bene finora. Ora chiudi la finestra e fai clic sul pulsante Aggiungi media. Vedrai che l'opzione "Tutti i media" è selezionata ma mostra quelli caricati. Per passare a tutte le immagini, dovrai attivare / disattivare il caricamento, quindi tornare a tutti i media. Qualcuno ha una soluzione a questo problema? Grazie per questo comunque.
Christine Cooper

4

@toscho Ah, ho trovato un bug nel tuo codice. Per favore, nudo con me. Esegui quanto segue per replicare il problema:

1) Apri una bozza di post.

2) Fare clic sul Add Mediapulsante. Attendere il caricamento della funzione jQuery.

3) Alla tua sinistra, fai clic sul Set Featured Imagelink.

4) Ora chiudi la finestra popup Media e nella pagina di modifica post, fai clic sul Set featured imagelink nella barra laterale destra.

5) Vedrai che la funzione jQuery non funzionerà.

Tuttavia, se avessi fatto clic Set featured imageprima sul collegamento al caricamento post modifica, la funzione funzionerebbe. Puoi replicare questo problema e forse trovare una soluzione? Ci scusiamo ancora per aver pubblicato questo come risposta, ma questa piattaforma non mi offre attualmente una migliore opzione.

EDIT: Qualcuno può far sapere a toscho di questo. Puoi farlo aggiungendo un commento alla sua risposta che credo dovrebbe dargli una notifica. Non riesco a scrivere commenti perché non ho abbastanza reputazione ...

MODIFICA 2 : se si desidera evitare disperatamente questo problema, è possibile rimuovere il collegamento "Imposta immagine in primo piano" nel popup e forzare l'utente a utilizzare il collegamento della barra laterale (come le versioni di WP precedenti alla 3.5). Utilizzare questo filtro introdotto in 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;
}

Come ho detto, questa è una soluzione disperata fino a quando non viene pubblicata una soluzione per il codice principale.


Ne sono consapevole, non ho tempo per estendere il plugin.
fuxia

Capisco, se trovassi il tempo nel prossimo futuro per estenderlo, saremmo tutti grati.
Christine Cooper

Ho aggiornato questa risposta con un "wordaround" per quelli disperati. inoltre puoi aggiungere questo alla tua risposta se lo desideri ...
Christine Cooper

2

La cosa principale che non mi è piaciuta della maggior parte di queste soluzioni è che lampeggiava su molti schermi e, se si faceva clic su Immagine in primo piano , si tornava a mostrare tutte le immagini. Dopo alcune ricerche penso che abbia trovato una soluzione permanente (grazie a Ünsal Korkmaz ) che sembra risolva questi problemi. Il codice:

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 
}

che imposta in modo permanente la libreria multimediale in modo che mostri solo "Caricato in questo post", anche se provi a cambiare la visualizzazione, il che significa che non lampeggiano.

Ho aggiunto questo codice per accompagnarlo per rimuovere completamente la casella di selezione:

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

Le nuove versioni di wordpress utilizzano un approccio diverso ( Backbonejs avanzato ) per l'uploader multimediale; Controlla il codice da questo plugin in quanto funziona per le nuove versioni di WordPress.


2
Sarebbe stato bello se tu avessi effettivamente condiviso il codice, non solo un link.
Kaiser

0

Queste sono le mie soluzioni da impostare dateFiltersul mese corrente, sebbene inneschi AJAX due volte.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.