Comment ajouter un nouvel onglet au gestionnaire de téléchargement de médias avec un ensemble d'images personnalisé?

18

Je voudrais ajouter un nouvel onglet pour télécharger le gestionnaire et les images de la liste intérieure de

theme_folder/images/patterns

J'ai essayé quelque chose comme ça pour ajouter un onglet mais cela ne fonctionne pas pour moi car il ajoute des onglets sur le côté du gestionnaire de médias mais lors du téléchargement d'images, cet onglet n'est pas visible.

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

pour être précis, c'est là que je voudrais ajouter un nouvel onglet et dans cet onglet, je voudrais lister les images du dossier de thème.

entrez la description de l'image ici

Je suis conscient que le gestionnaire de médias JS doit être réécrit, mais pour être honnête, je ne sais pas par où commencer. On dirait que j'ai besoin d'écrire un tout nouveau modèle pour le gestionnaire de médias afin d'y parvenir.

J'ai parcouru toutes les suggestions, mais il semble que personne ne lise la question. Comme conseillé "J'ai essayé quelque chose comme ça pour ajouter un onglet mais cela ne fonctionne pas pour moi car il ajoute des onglets sur le côté du gestionnaire de médias mais lors du téléchargement d'images, cet onglet n'est pas visible."

Donc pour l'instant personne n'est en mesure de trouver la solution.

Benn
la source

Réponses:

6

C'est un vieux fil mais pour moi toujours aussi pertinent. J'ai bidouillé et j'ai trouvé ce code pour ajouter un onglet multimédia ici, peut-être que quelqu'un veut continuer à gérer le contenu de l'onglet? :)

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

Et puis le fichier 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, donc. Pour gérer le contenu, je n'ai pas trouvé une bonne façon de le faire par wp.media. Ma solution actuelle est 2 écouteurs, un pour ouvrir la bibliothèque multimédia et un pour cliquer dans le menu du routeur multimédia;

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 fonction doMyTabContent (); est juste quelque chose comme;

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

Je suis sûr que cela peut se faire de manière beaucoup plus délicate. Quiconque lit ceci et a une meilleure solution, veuillez remplir :-)

gubbfett
la source
merci pour cela. Vieux ou non, il n'a jamais été résolu. et c'est exactement ce que j'ai demandé à prntscr.com/kse5yk . Bon travail!
Benn
avez-vous essayé de combiner ce wordpress.stackexchange.com/a/190604/67176 et votre création d'onglet? Je suis sûr à 99% que cela pourrait fonctionner, surtout si les onglets ont le même identifiant.
Benn
1
Oui, j'ai examiné cela en premier, mais je ne suis pas vraiment un fan de la solution iframe fournie avec cette solution. Réception des données d'image avec la messagerie iframe. Afficher le contenu est une chose, mais gérer les actions en est une autre. :) Peut-être que je manque quelque chose.
gubbfett
Bonjour @Benn vient de se retrouver dans les cauchemars de wp.media. Le code que j'ai fourni ci-dessus où je fais mon "doMyTabContent" ne se déclenche que sur un événement. Par exemple: chargez une publication, cliquez sur ajouter une image sélectionnée et fermez. Après ce clic, ajoutez un média pour le message, et il ne charge rien, probablement car le wp.media est dans une nouvelle instance (l'onglet est toujours là). Je ne sais pas comment avancer ici. Avez-vous fait des progrès concernant l'ajout d'un onglet et l'insertion de supports d'une manière ou d'une autre? Tu veux partager du code? :)
gubbfett
@gubbfett avez-vous déjà trouvé une solution à cela?
RaajTram
5

Selon WordPress Codex, vous pouvez ajouter un onglet personnalisé dans l'uploader de médias comme ceci:

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

J'espère que cela vous aidera.

Touqeer Shafi
la source
7
Pour être clair, cet onglet n'est pas ajouté en haut de la boîte modale, mais dans la barre latérale gauche. Je n'ai pas trouvé de moyen d'ajouter réellement l'onglet en haut de l'onglet Insérer un média. J'ai également eu des problèmes pour essayer d'utiliser les styles CSS déjà disponibles car le contenu est inséré dans un iframe. Ce qui signifie probablement que vous devrez ajouter votre propre css pour afficher correctement les images. Et juste pour compléter la réponse, vous pouvez utiliser la fonction php scandir () pour récupérer tous les éléments du dossier image.
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' );
Sarath
la source
1
Votre code est plein d'erreurs de syntaxe. Veuillez utiliser la syntaxe php appropriée car la syntaxe que vous utilisez n'existe même pas en php. Veuillez également expliquer ce que fait votre code et comment il fonctionne. Merci
Pieter Goosen
Je venais de modifier le code. Son code de travail. Essayez ce code.
Sarath
2
Veuillez relire mon commentaire, mais ignorez la partie syntaxique. Le dumping de code n'est pas une réponse de qualité. Veuillez ajouter une explication sur la façon dont votre code fonctionne et ce qu'il fait
Pieter Goosen