¿Cambiar la vista predeterminada de la Biblioteca de medios en 3.5?

33

Al insertar medios en una publicación, ¿hay alguna forma de cambiar la vista predeterminada de la Biblioteca de medios de "Todos los elementos de medios" a "Cargados en esta publicación"?

Captura de pantalla prestada

Hay otro hilo de donde se extrajo esta pregunta: Cómo administrar las relaciones de apego

div
fuente
¿Has intentado desactivar todos los demás complementos, volver al tema predeterminado y luego activar el de toscho? Podría ser un conflicto JS.
kaiser

Respuestas:

22

Hubo dos errores menores en mi respuesta anterior:

  1. Olvidé activar el changeevento para el padre.
  2. Llamé a la función en cada llamada AJAX, haciendo imposible otras selecciones.

Aquí está el código fijo:

<?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
fuente
Muchas gracias toscho! <br> ¡El código del complemento que dejó caer aquí me funciona de maravilla ahora! (Sería bueno si alguien puede convertir esta "respuesta" en un comentario y establecer el estado como respondido)
div
Usted es el único que puede marcar la marca de verificación de respuesta . Tienes que usar la cuenta que usaste para preguntar. Fusioné ambas cuentas, ahora debería poder marcar la marca de verificación. :)
fuxia
3
Este código muy elegante funciona cuando hace clic en el Add Mediabotón pero no cuando hace clic en Set featured image. ¿Hay alguna manera de hacer que funcione allí también?
Christine Cooper
También funciona en mi sistema para imágenes destacadas.
fuxia
1
Esto tiene un problema potencial, parece que está seleccionando todo lo que tiene valor = cargado. Además, si desea agregar javascript a la inicialización de cada cargador, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});sería más apropiado.
NoBugs
13

El único problema con el JS anterior es que alterna el cuadro de selección para activar el cambio después de que se carga la página y después de que ya ha comenzado a descargar TODOS LOS ARTÍCULOS DE MEDIOS. Para mi cliente en un T1 lento, esto bloqueó las cosas ya que descargó todos los elementos TODOS LOS TIEMPOS DE MEDIOS y los elementos CARGADOS A ESTE POSTE juntos.

Recibí ayuda del gran Sewpafly que desarrolla el complemento Editor de miniaturas de publicaciones . compartió una gran pieza de JS que evita la carga de TODOS LOS ARTÍCULOS DE MEDIOS y lo obliga a cargar solo imágenes "CARGADAS A ESTE POST" de forma predeterminada.

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

Dejé caer eso en un archivo JS y lo llamé en functions.php con admin_enqueue_scripts. Ver GIST arriba para PHP y JS.

Funciona de manera brillante. Esperemos que la gente de WordPress solucione esto en una próxima actualización, pero por ahora Sewpafly tiene la mejor solución que he encontrado. Gracias de nuevo amigo.

Debo señalar que acabo de descubrir que el visor tiene por defecto imágenes de tamaño MEDIO que había deshabilitado (establecido en 0,0) ya que no estaba usando y evitando la hinchazón. Cuando el tamaño mediano no está disponible, WordPress carga la imagen de tamaño COMPLETO. Desde entonces he dado en habilitado el tamaño mediano.

Dave
fuente
extremadamente útil: ¿no se puede limitar la cantidad de imágenes que se muestran en la biblioteca de medios con algún tipo de gancho?
Innata
Personalmente, también me gusta agregar este CSS que ocultará el menú desplegable de medios: pastebin.com/1dP6SR4g
Howdy_McGee
1
Desafortunadamente, esta solución tiene un problema importante. Haga lo siguiente: 1. Abra una publicación en la pantalla de edición posterior. 2. Haga clic en el enlace "Establecer imagen destacada" (antes de hacer clic en el botón Agregar medios). 3. El código funciona bien hasta ahora. Ahora, cierre la ventana y luego haga clic en el botón Agregar medios. Verá que la opción "Todos los medios" está seleccionada pero muestra las subidas. Para alternar a todas las imágenes, deberá alternar a subido y luego volver a todos los medios. ¿Alguien tiene una solución a este problema? Gracias por esto, no obstante.
Christine Cooper
4

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

1) Abrir un borrador de publicación.

2) Haga clic en el Add Mediabotón. Espere a que se cargue la función jQuery.

3) A su izquierda, haga clic en el Set Featured Imageenlace.

4) Ahora cierre la ventana emergente de Medios y en la página de edición de publicación, haga clic en el Set featured imageenlace en la barra lateral derecha.

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

Sin embargo, si hubiera hecho clic en el Set featured imageenlace primero en la carga posterior a la edición, la función funcionaría. ¿Puedes replicar este problema y posiblemente encontrar una solución? Lo siento nuevamente por publicar esto como respuesta, pero esta plataforma no me ofrece una mejor opción actualmente.

EDITAR: ¿Alguien puede informar a Toscho sobre esto? Puede hacerlo agregando un comentario a su respuesta que creo que debería darle una notificación. No puedo escribir comentarios porque no tengo suficiente reputación ...

EDITAR 2 : si desea evitar desesperadamente este problema, puede eliminar el enlace "Establecer imagen destacada" en la ventana emergente y obligar al usuario a usar el enlace de la barra lateral (como las versiones de WP anteriores a 3.5). Utilice 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, esta es una solución desesperada hasta que se publique una solución para el código principal.

Christine Cooper
fuente
Soy consciente de esto, simplemente no tengo tiempo para extender el complemento.
fuxia
Entiendo que si encontraran el tiempo en el futuro cercano para extenderlo, todos estaríamos agradecidos.
Christine Cooper
Actualicé esta respuesta con un "wordaround" para los desesperados. toscho puede agregar esto a su respuesta si lo desea ...
Christine Cooper
2

Lo principal que no me gustó de la mayoría de estas soluciones es que parpadeaba en muchas pantallas, y si hacía clic en Imagen destacada volvería a mostrar todas las imágenes. Después de buscar, creo que encontré una solución permanente (gracias a Ünsal Korkmaz ) que parece que resuelve 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 configura permanentemente la biblioteca de medios para que solo muestre "Subido a esta publicación", incluso si intenta cambiar la vista, lo que significa que no parpadea.

He agregado 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
}
Howdy_McGee
fuente
2

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

numediaweb
fuente
2
Hubiera sido bueno si realmente compartiera el código, no solo un enlace.
kaiser
0

Esta es mi solución para configurar el dateFiltermes 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);
  }
})
Eilluj
fuente