Lors de l'insertion d'un mé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"?
Cette question a également été extraite d'un autre fil: Comment gérer les relations d'attachement
Il y avait deux erreurs mineures dans ma réponse précédente:
change
pour le parent.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
}
Le seul problème avec le JS ci-dessus est qu’il bascule la case de sélection pour déclencher la modification 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.
Sewpafly, qui a développé Post Thumbnail Editor Plugin, 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 à charger uniquement les images "TÉLÉCHARGÉES À CET ARTICLE" par défaut.
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 bonnes personnes wordpress résoudre 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 le visualiseur affiche par défaut les images de taille MOYEN que j'ai 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.
@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
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 ...
EDIT 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 (comme WP versions). avant 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, il s'agit d'une solution désespérée jusqu'à ce qu'une solution soit affichée pour le code principal.
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 comme il fonctionne pour les nouvelles versions de WordPress.
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 cliquez sur Image en vedette , toutes les images seront affichées. 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
}
Ce sont mes solutions pour définir dateFilter
au mois en cours, bien qu'il déclenche AJAX deux fois.
.on('content:render:browse', function(a, b) {
var filter = a.toolbar.secondary.get('dateFilter');
if (filter.model) {
filter.model.set(filter.filters[1].props);
}
})