Come aggiungere una nuova scheda al gestore del caricamento multimediale con un set di immagini personalizzato?


18

Vorrei aggiungere una nuova scheda per caricare il gestore e le immagini dell'elenco interno da

theme_folder/images/patterns

Ho provato qualcosa del genere per aggiungere una scheda ma non funziona per me poiché aggiunge schede sul lato di Media Manager ma al caricamento dell'immagine quella scheda non è visibile.

function custom_media_upload_tab_name( $tabs ) {
    $newtab = array( 'tab_slug' => 'Patterns' );
    return array_merge( $tabs, $newtab );
}

add_filter( 'media_upload_tabs', 'custom_media_upload_tab_name' );

function custom_media_upload_tab_content() {
    // Add you content here.
    echo 'Hello content';
}
add_action( 'media_upload_tab_slug', 'custom_media_upload_tab_content' );

per essere precisi, qui è dove vorrei aggiungere una nuova scheda e in quella scheda vorrei elencare le immagini dalla cartella del tema.

inserisci qui la descrizione dell'immagine

Sono consapevole che il media manager JS deve essere riscritto per questo, ma ad essere sincero non so da dove cominciare. Sembra che per raggiungere questo obiettivo sia necessario scrivere un modello completamente nuovo per Media Manager.

Ho seguito tutti i suggerimenti ma sembra che nessuno stia leggendo la domanda. Come consigliato "Ho provato qualcosa del genere per aggiungere una scheda ma non funziona per me poiché aggiunge schede sul lato di Media Manager ma al caricamento dell'immagine quella scheda non è visibile."

Quindi per ora nessuno è in grado di trovare la soluzione per questo.

Risposte:


6

Questo è un vecchio thread, ma per me ancora così rilevante. Ho avuto problemi e ho trovato questo codice per l'aggiunta di una scheda multimediale qui, forse qualcuno vuole continuare su come gestire il contenuto per la scheda? :)

add_action('admin_enqueue_scripts', function(){
    wp_enqueue_script( 'my-media-tab', plugin_dir_url( __FILE__ ) . '/js/mytab.js', array( 'jquery' ), '', true );
});

E poi il file js:

var l10n = wp.media.view.l10n;
wp.media.view.MediaFrame.Select.prototype.browseRouter = function( routerView ) {
    routerView.set({
        upload: {
            text:     l10n.uploadFilesTitle,
            priority: 20
        },
        browse: {
            text:     l10n.mediaLibraryTitle,
            priority: 40
        },
        my_tab: {
            text:     "My tab",
            priority: 60
        }
    });
};

EDIT: Ok, quindi. Per la gestione dei contenuti non ho trovato un modo carino per farlo tramite wp.media. La mia soluzione attuale sono 2 lisener, uno per aprire la libreria multimediale e uno per fare clic nel menu del router multimediale;

jQuery(document).ready(function($){
    if ( wp.media ) {
        wp.media.view.Modal.prototype.on( "open", function() {
            if($('body').find('.media-modal-content .media-router a.media-menu-item.active')[0].innerText == "My tab")
                doMyTabContent();
        });
        $(wp.media).on('click', '.media-router a.media-menu-item', function(e){
            if(e.target.innerText == "My tab")
                doMyTabContent();
        });
    }
});

la funzione doMyTabContent (); è solo qualcosa di simile;

function doMyTabContent() {
    var html = '<div class="myTabContent">';
    //My tab content here
    html += '</div>';
    $('body .media-modal-content .media-frame-content')[0].innerHTML = html;
}

Sono molto sicuro che questo possa essere fatto in un modo molto più delicato. Chiunque legga questo e abbia una soluzione migliore, compila :-)


grazie per questo guarderà dentro ad esso. Vecchio o no non è mai stato risolto. e questo è esattamente quello che ho chiesto per prntscr.com/kse5yk . Ottimo lavoro!
Benn,

hai provato a combinare questo wordpress.stackexchange.com/a/190604/67176 e la creazione della tua scheda? Sono sicuro al 99% che potrebbe funzionare soprattutto se le schede hanno lo stesso ID.
Benn,

1
Sì, ho esaminato prima quello, ma non sono un fan della soluzione iframe fornita con questa soluzione. Ricezione di dati immagine con messaggistica iframe. La visualizzazione del contenuto è una cosa, ma la gestione delle azioni è un'altra. :) Forse mi sto perdendo qualcosa.
Gubbfett,

Ciao @Benn ho appena raggiunto gli incubi di wp.media. Il codice che ho fornito sopra dove eseguo il mio "doMyTabContent" si attiva solo su un evento. Ad esempio: carica un post, fai clic su Aggiungi immagine in primo piano e chiudi. Dopo questo clic aggiungi i media per il post e non carica nulla, probabilmente poiché wp.media è in una nuova istanza (la scheda è ancora lì). Non sono sicuro di come andare avanti qui. Hai fatto progressi per quanto riguarda l'aggiunta di una scheda e l'inserimento di contenuti multimediali in qualche modo? Vuoi condividere un po 'di codice? :)
gubbfett,

@gubbfett hai mai trovato una soluzione a questo?
RaajTram,

5

Secondo WordPress Codex è possibile aggiungere una scheda personalizzata nel caricatore multimediale in questo modo:

// add the tab
add_filter('media_upload_tabs', 'my_upload_tab');
function my_upload_tab($tabs) {
    $tabs['mytabname'] = "My Tab Name";
    return $tabs;
}

// call the new tab with wp_iframe
add_action('media_upload_mytabname', 'add_my_new_form');
function add_my_new_form() {
    wp_iframe( 'my_new_form' );
}

// the tab content
function my_new_form() {
    echo media_upload_header(); // This function is used for print media uploader headers etc.
    echo '<p>Example HTML content goes here.</p>';
}

Spero che ti possa aiutare.


7
Per essere chiari, quella scheda non viene aggiunta nella parte superiore della casella modale, ma nella barra laterale sinistra. Non sono riuscito a trovare un modo per aggiungere effettivamente la scheda nella parte superiore della scheda Inserisci supporto. Ho anche avuto problemi nel tentativo di utilizzare gli stili CSS già disponibili perché il contenuto è inserito in un iframe. Il che probabilmente significa che dovresti aggiungere i tuoi css per visualizzare correttamente le immagini. E solo per completare la risposta, è possibile utilizzare la funzione php scandir () per recuperare tutti gli elementi all'interno della cartella dell'immagine.
gdaniel,

-1
   function axcoto_genify_media_menu($tabs) {
            $newtab = array('genify'  => __('Axcoto Genify', 'axcotogenify'));
            return array_merge($tabs, $newtab);
            }
            add_filter('media_upload_tabs', 'axcoto_genify_media_menu');

           array('genify' => __('Axcoto Genify', 'axcotogenify'));


        function axcoto_genify_media_process() {
        media_upload_header();
        echo 'hello';
        }
        function axcoto_genify_media_menu_handle() {
        return wp_iframe( 'axcoto_genify_media_process');
        }



 if ( ( is_array( $content_func ) && ! empty( $content_func[1] ) && 0 === strpos( (string) $content_func[1], 'media' ) ) || 0 === strpos( $content_func, 'media' ) )
        wp_enqueue_style( 'media' );

1
Il tuo codice è pieno di errori di sintassi. Si prega di utilizzare la sintassi php corretta poiché la sintassi che si sta utilizzando non esiste nemmeno in php. Inoltre, spiega cosa fa il tuo codice e come funziona. Grazie
Pieter Goosen il

Avevo appena modificato il codice. È un codice funzionante. Prova questo codice.
sarath,

2
Rileggi il mio commento, ma salta la parte della sintassi. Il codice di dumping non è una risposta di qualità. Per favore, aggiungi una spiegazione su come funziona il tuo codice e cosa fa
Pieter Goosen,
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.