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

33

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

Capture empruntée

Cette question a également été extraite d'un autre fil: comment gérer les relations d'attachement

div
la source
Avez-vous essayé de désactiver tous les autres plugins, de revenir au thème par défaut, puis d'activer celui de toscho? Peut-être un conflit JS.
Kaiser

Réponses:

22

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

  1. J'ai oublié de déclencher l' changeévénement pour le parent.
  2. J'ai appelé la fonction sur 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
}
fuxia
la source
Merci beaucoup, toscho! <br> Le code de plugin que vous avez laissé ici fonctionne comme un charme pour moi maintenant! (ce serait bien si quelqu'un pouvait convertir cette "réponse" en un commentaire et définir le statut sur répondu)
div
Vous êtes le seul à pouvoir cocher la case à cocher de la réponse . Vous devez utiliser le compte que vous avez utilisé pour demander. J'ai fusionné les deux comptes, vous devriez pouvoir cocher la case maintenant. :)
fuxia
3
Ce code très élégant fonctionne lorsque vous cliquez sur le Add Mediabouton mais pas lorsque vous cliquez sur le Set featured image. Y at-il un moyen de le faire fonctionner là aussi?
Christine Cooper
Cela fonctionne également sur mon système pour les images en vedette.
fuxia
1
Cela a un problème potentiel, il semble que vous sélectionniez tout ce qui a la valeur = uploadé. En outre, si vous vouliez ajouter du javascript à l' initialisation de chaque uploader, ce wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});serait plus approprié.
NoBugs
13

Le seul problème avec le JS ci-dessus est qu’il bascule la case de sélection pour déclencher le changement après le chargement de la page et après le téléchargement de TOUS LES ÉLÉMENTS MULTIMÉDIA déjà commencé. Pour mon client sur un T1 lent, cela bloquait les choses, car il téléchargeait les éléments ALL MEDIA TIMES et UPLOADED WITH THIS POST ensemble.

Sewpafly, qui a mis au point le plug- in Post Thumbnail Editor, m'a aidé . il a partagé un excellent morceau de JS qui empêche la charge de TOUS LES ÉLÉMENTS MULTIMÉDIAS et l'oblige à ne charger que les images "TÉLÉCHARGÉES À 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: https://gist.github.com/fishnyc22/5593693

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

Fonctionne avec brio. Espérons que les bons spécialistes de wordpress résoudront ce problème dans une prochaine mise à jour, mais pour l'instant, Sewpafly a la meilleure solution que j'ai trouvée. Merci encore mon pote.

Je dois noter que je viens de découvrir que la visionneuse utilise par défaut les images de taille MOYEN 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.

dave
la source
extrêmement utile - ne peut-on pas simplement limiter le nombre d'images affichées dans la médiathèque avec un type de crochet?
Innate
Personnellement, j'aime aussi ajouter ce CSS qui cachera la liste déroulante des médias: pastebin.com/1dP6SR4g
Howdy_McGee
1
Malheureusement, cette solution souffre d'un problème majeur. Procédez comme suit: 1. Ouvrez une publication dans l'écran de post-édition. 2. Cliquez sur le lien "Définir l'image sélectionnée" (avant de cliquer sur le bouton Ajouter un média). 3. Le code fonctionne bien jusqu'à présent. Fermez la fenêtre et cliquez ensuite sur le bouton Ajouter un média. Vous verrez que l'option "Tous les médias" est sélectionnée, mais les fichiers téléchargés s'affichent. Pour basculer sur toutes les images, vous devez basculer sur le mode téléchargement, puis sur tous les supports. Quelqu'un at-il une solution à ce problème? Merci pour cela néanmoins.
Christine Cooper
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 Add Mediabouton. Attendez que la fonction jQuery soit chargée.

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

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

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

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

EDIT: Quelqu'un peut-il s'il vous plaît laisser toscho savoir à ce sujet. Vous pouvez le faire en ajoutant un commentaire à sa réponse qui, à mon avis, devrait lui donner une notification. Je ne peux pas écrire de commentaires car je n'ai pas assez de réputation ...

ÉDITER 2 : si vous souhaitez éviter ce problème de manière 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 (comme les versions de WP antérieures à 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.

Christine Cooper
la source
Je suis conscient de cela, je n'ai tout simplement pas le temps d'étendre le plugin.
fuxia
Je comprends que si vous trouviez le temps de l’étendre dans un proche avenir, nous vous en serions tous reconnaissants.
Christine Cooper
J'ai mis à jour cette réponse avec un "wordaround" pour les désespérés. toscho tu peux ajouter ça à ta réponse si tu veux ...
Christine Cooper
2

La principale chose que je n’ai pas aimée dans la plupart de ces solutions est qu’elle clignotait sur de nombreux écrans et que si vous cliquiez sur Image en vedette, cela reviendrait à afficher toutes les images. 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 en permanence la médiathèque pour n’afficher que «Téléchargé dans cet article», même si vous essayez de changer l’affichage, ce qui signifie qu’il ne clignote pas.

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
}
Howdy_McGee
la source
2

Les nouvelles versions de wordpress utilisent une approche différente (Advanced Backbonejs ) pour l’éditeur de média; Vérifiez le code de ce plugin car il fonctionne pour les nouvelles versions de WordPress.

numediaweb
la source
2
Cela aurait été bien si vous aviez partagé le code - pas seulement un lien.
Kaiser
0

Ce sont mes solutions pour définir dateFilterle mois en cours, même si 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);
  }
})
Eilluj
la source