Changer la vue par défaut de la médiathèque dans 3.5?

33

Lors de l'insertion d'un média dans une publication, existe-t-il un moyen de changer la vue par défaut de la médiathèque de "Tous les éléments multimédias" à "Téléchargée dans cette publication"?

Ilexisteunautrefild'oùprovientcettequestion: Gestion des relations de pièce jointe

    
posée div 14.12.2012 - 14:23
la source

6 réponses

22

Il y avait deux erreurs mineures dans ma réponse précédente:

  1. J'ai oublié de déclencher l'événement change pour le parent.
  2. J'ai appelé la fonction à chaque appel AJAX, rendant toute autre sélection impossible.

Voici le code fixe:

<?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
}
    
réponse donnée fuxia 15.12.2012 - 15:58
la source
13

Le seul problème avec le JS ci-dessus est qu’il bascule dans la zone de sélection pour déclencher la modification après le chargement de la page et après le début de son téléchargement de TOUS LES ÉLÉMENTS MÉDIA. Pour mon client sur un T1 lent, cela bloquait les choses, car il téléchargeait les éléments ALL MEDIA TIMES et UPLOADED TO THIS POST.

Le grand Sewpafly m'a aidé à développer le éditeur de vignettes de messages . Il a partagé un excellent morceau de JS qui empêche la charge de TOUS LES ARTICLES MÉDIAS et l’oblige à ne charger que les images "ENVOYÉES SUR CET ARTICLE" par défaut.

Le code

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

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

Le même code sur GitHub: enlace

J'ai ajouté cela dans un fichier JS et je l'ai appelé dans functions.php avec les scripts admin_enqueue_s. Voir GIST ci-dessus pour PHP et JS.

Fonctionne avec brio. Espérons que les bonnes personnes wordpress résoudront ce problème dans une prochaine mise à jour, mais pour le moment Sewpafly a la meilleure solution. ont trouvé. Merci encore mon pote.

Je dois noter que je viens de découvrir que le visualiseur affiche par défaut les images de taille MOYENNE que j'avais désactivées (définies sur 0,0) car je n'utilisais ni ne prévenais le gonflement. Lorsque la taille moyenne n'est pas disponible, wordpress charge l'image au format COMPLET. J'ai depuis donné activé la taille moyenne.

    
réponse donnée dave 16.05.2013 - 03:54
la source
4

@toscho Ah, j'ai trouvé un bug dans votre code. S'il vous plaît nue avec moi. Procédez exactement comme suit pour reproduire le problème:

1) Ouvrez un brouillon.

2) Cliquez sur le bouton Add Media . Attendez que la fonction jQuery soit chargée.

3) Sur votre gauche, cliquez sur le lien Set Featured Image .

4) Fermez maintenant la fenêtre contextuelle Media et, sur la page de modification, cliquez sur le lien Set featured image dans la barre latérale droite.

5) Vous verrez que la fonction jQuery ne fonctionnera pas.

Cependant, si vous aviez cliqué sur le lien Set featured image lors du chargement post-édition, la fonction fonctionnerait. Pouvez-vous reproduire ce problème et éventuellement trouver une solution? Désolé encore pour avoir posté cette réponse, mais cette plate-forme ne m'offre pas une meilleure option pour le moment.

EDIT: Quelqu'un peut-il avertir toscho Vous pouvez le faire en ajoutant à sa réponse un commentaire qui, à mon avis, devrait lui donner notification. Je ne peux pas écrire de commentaires car je n'ai pas assez de réputation ...

MODIFIER 2 : si vous souhaitez éviter ce problème de façon désespérée, vous pouvez supprimer le lien "Définir l'image sélectionnée" dans la fenêtre contextuelle et obliger l'utilisateur à utiliser le lien de la barre latérale 3.5). Utilisez ce filtre introduit dans 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;
}

Comme je l’ai dit, c’est une solution désespérée jusqu’à ce qu’une solution soit affichée pour le code principal.

    
réponse donnée Christine Cooper 15.12.2012 - 17:28
la source
2

La plupart des solutions que je n'ai pas aimées, c'est que l'écran clignotait sur de nombreux écrans. Si vous cliquez sur Image sélectionnée , toutes les images s'affichent à nouveau. Après quelques recherches, je pense avoir trouvé une solution permanente (Merci à Ünsal Korkmaz ) qui semble résoudre ces problèmes. Le code:

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 
}

qui définit de manière permanente la médiathèque pour afficher uniquement "Téléchargée dans cet article", même si vous essayez de modifier l'affichage, ce qui signifie qu'aucun clignotement ne se produit.

J'ai ajouté ce code pour l'accompagner afin de supprimer complètement la zone de sélection:

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
}
    
réponse donnée Howdy_McGee 04.04.2014 - 19:34
la source
2

Les nouvelles versions de wordpress utilisent une approche différente ( Backbonejs avancée) pour le programme de téléchargement de média; Vérifiez le code dans ce plugin , car il fonctionne avec les nouvelles versions de WordPress.

    
réponse donnée numediaweb 30.05.2015 - 18:03
la source
0

Voici mes solutions pour définir dateFilter sur le mois en cours, bien que cela déclenche deux fois AJAX.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
    
réponse donnée Eilluj 22.03.2016 - 14:44
la source

Lire d'autres questions sur les étiquettes