¿Cómo cambiar la vista predeterminada de la Biblioteca Multimedia en WordPress 3.5?

14 dic 2012, 15:23:23
Vistas: 14.9K
Votos: 35

Al insertar medios en una entrada, ¿hay alguna forma de cambiar la vista predeterminada de la Biblioteca Multimedia de "Todos los elementos multimedia" a "Subidos a esta entrada"?

Captura de pantalla de ejemplo

Existe otro hilo del cual se extrajo esta pregunta: Cómo gestionar relaciones de archivos adjuntos

1
Comentarios

¿Has intentado desactivar todos los demás plugins, volver al tema predeterminado y luego activar solo el de toscho? Podría tratarse de un conflicto con JS.

kaiser kaiser
15 dic 2012 16:49:47
Todas las respuestas a la pregunta 6
6
22

Había dos pequeños errores en mi respuesta anterior:

  1. Olvidé activar el evento change para el elemento padre.
  2. Llamé a la función en cada llamada AJAX, lo que hacía imposible otras selecciones.

Aquí está el código corregido:

<?php
/**
 * Plugin Name: Preseleccionar adjuntos específicos de entradas
 */

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 llamado = 0;
    $('#wpcontent').ajaxStop(function() {
        if ( 0 == llamado ) {
            $('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
            llamado = 1;
        }
    });
});
</script>
    <?php
}
15 dic 2012 16:58:28
Comentarios

¡Muchas gracias, toscho! <br>¡El código del plugin que compartiste aquí funciona perfectamente para mí ahora! (sería genial si alguien puede convertir esta "respuesta" en un comentario y marcar el estado como respondido)

div div
15 dic 2012 17:20:47

Eres el único que puede marcar la casilla de respuesta. Debes usar la cuenta con la que hiciste la pregunta. He fusionado ambas cuentas, ahora deberías poder marcar la casilla. :)

fuxia fuxia
15 dic 2012 17:22:11

Este código tan elegante funciona cuando haces clic en el botón Add Media (Añadir medios) pero no cuando haces clic en Set featured image (Establecer imagen destacada). ¿Hay alguna forma de hacer que funcione allí también?

Christine Cooper Christine Cooper
15 dic 2012 18:09:50

También funciona en mi sistema para imágenes destacadas.

fuxia fuxia
15 dic 2012 18:14:25

Esto tiene un problema potencial, parece que estás seleccionando todo lo que tenga value=uploaded. Además, si quisieras agregar javascript a la inicialización de cada cargador, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...tu código aquí...}); sería más apropiado.

NoBugs NoBugs
9 ene 2013 07:04:17

¿Hay alguna manera de hacer que esto funcione con Crear Galería e Imagen Destacada?

Howdy_McGee Howdy_McGee
29 ago 2013 18:31:56
Mostrar los 1 comentarios restantes
3
13

El único problema con el JS anterior es que activa la caja de selección para disparar el cambio después de que la página se carga y después de que ya comenzó a descargar TODOS LOS ELEMENTOS MULTIMEDIA. Para mi cliente con una conexión T1 lenta, esto bloqueaba todo mientras descargaba tanto TODOS LOS ELEMENTOS MULTIMEDIA como los elementos SUBIDOS A ESTA ENTRADA al mismo tiempo.

Recibí ayuda del gran Sewpafly, quien desarrolla el plugin Post Thumbnail Editor. Él compartió un excelente fragmento de JS que evita la carga de TODOS LOS ELEMENTOS MULTIMEDIA y fuerza que solo cargue las imágenes "SUBIDAS A ESTA ENTRADA" por defecto.

El Código

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

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

El mismo código en GitHub: https://gist.github.com/fishnyc22/5593693

Coloqué eso en un archivo JS y lo llamé en functions.php con admin_enqueue_scripts. Mira el GIST de arriba para ver tanto el PHP como el JS.

Funciona brillantemente. Esperemos que los buenos desarrolladores de WordPress arreglen esto en una próxima actualización, pero por ahora Sewpafly tiene la mejor solución que he encontrado. Gracias de nuevo, amigo.

Debo mencionar que acabo de descubrir que el visor usa por defecto imágenes de tamaño MEDIANO, las cuales había deshabilitado (configuradas a 0,0) ya que no las usaba y para evitar inflar la base de datos. Cuando el tamaño mediano no está disponible, WordPress carga la imagen en tamaño COMPLETO. Finalmente, terminé habilitando el tamaño mediano.

16 may 2013 04:54:22
Comentarios

extremadamente útil - ¿no se puede simplemente limitar el número de imágenes que se muestran en la biblioteca multimedia con algún tipo de hook?

Laurence Tuck Laurence Tuck
15 oct 2013 14:26:15

Personalmente, también me gusta agregar este CSS que ocultará el menú desplegable de medios: http://pastebin.com/1dP6SR4g

Howdy_McGee Howdy_McGee
5 nov 2013 23:14:24

Desafortunadamente, esta solución tiene un problema importante. Haz lo siguiente: 1. Abre una publicación en la pantalla de edición. 2. Haz clic en el enlace "Establecer imagen destacada" (antes de hacer clic en el botón Añadir medios). 3. El código funciona bien hasta ahora. Ahora, cierra la ventana y luego haz clic en el botón Añadir medios. Verás que la opción "Todos los medios" está seleccionada pero muestra los archivos subidos. Para ver todas las imágenes, tendrás que cambiar a subidos y luego volver a todos los medios. ¿Alguien tiene una solución para este problema? Gracias de todos modos.

Christine Cooper Christine Cooper
15 nov 2013 18:19:46
3

@toscho Ah, encontré un error en tu código. Por favor, ten paciencia conmigo. Haz exactamente lo siguiente para replicar el problema:

1) Abre una entrada en borrador.

2) Haz clic en el botón Añadir medio. Espera a que la función jQuery se cargue.

3) A la izquierda, haz clic en el enlace Establecer imagen destacada.

4) Ahora cierra la ventana emergente de Medios y en la página de edición de la entrada, haz clic en el enlace Establecer imagen destacada en la barra lateral derecha.

5) Verás que la función jQuery no funcionará.

Sin embargo, si hubieras hecho clic primero en el enlace Establecer imagen destacada al cargar la edición de la entrada, la función sí habría funcionado. ¿Puedes replicar este problema y posiblemente encontrar una solución? Perdón de nuevo por publicar esto como respuesta, pero esta plataforma no me ofrece una mejor opción actualmente.

EDITADO: ¿Podría alguien hacerle saber esto a toscho? Puedes hacerlo añadiendo un comentario a su respuesta, lo cual creo que le enviará una notificación. No puedo escribir comentarios ya que no tengo suficiente reputación...

EDITADO 2: Si quieres evitar este problema desesperadamente, puedes eliminar el enlace "Establecer imagen destacada" en la ventana emergente y forzar al usuario a usar el enlace de la barra lateral (como en versiones de WP anteriores a la 3.5). Usa este filtro que se introdujo en 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;
}

Como dije, esto es una solución desesperada hasta que haya una solución publicada para el código principal.

15 dic 2012 18:28:54
Comentarios

Soy consciente de esto, simplemente no tengo tiempo para extender el plugin.

fuxia fuxia
16 dic 2012 18:44:41

Lo entiendo, si encuentras tiempo en un futuro cercano para extenderlo, todos estaríamos agradecidos.

Christine Cooper Christine Cooper
16 dic 2012 18:47:04

Actualicé esta respuesta con un "workaround" para los más desesperados. toscho puedes añadir esto a tu respuesta si lo deseas...

Christine Cooper Christine Cooper
16 dic 2012 19:35:04
0

Lo que no me gustó de la mayoría de estas soluciones es que parpadeaba en muchas pantallas, y si hacías clic en Imagen destacada volvía a mostrar todas las imágenes. Después de buscar, creo que encontré una solución permanente (gracias a Ünsal Korkmaz) que parece resolver estos problemas. El código:

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 
}

que establece permanentemente la biblioteca de medios para mostrar solo "Subido a esta entrada", incluso si intentas cambiar la vista, lo que significa que no hay parpadeo.

He añadido este código para acompañarlo y eliminar completamente el cuadro de selección:

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
}
4 abr 2014 20:34:45
1

Las nuevas versiones de WordPress utilizan un enfoque diferente (avanzado Backbonejs) para el cargador de medios; Revisa el código de este plugin ya que funciona para las nuevas versiones de WordPress.

30 may 2015 19:03:27
Comentarios

Hubiera sido bueno si realmente compartieras el código, no solo un enlace.

kaiser kaiser
6 abr 2016 02:53:55
0

Estas son mis soluciones para establecer dateFilter al mes actual, aunque activa AJAX dos veces.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
22 mar 2016 15:44:57