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

33

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

Hayotrohilodesdedondeseextrajoestapregunta: Cómo administrar las relaciones de archivo adjunto

    
pregunta div 14.12.2012 - 14:23

6 respuestas

22

Hubo dos errores menores en mi respuesta anterior:

  1. Olvidé activar el evento change 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
}
    
respondido por el fuxia 15.12.2012 - 15:58
13

El único problema con el JS anterior es que cambia el cuadro de selección para activar el cambio después de que se cargue la página y luego de que ya haya comenzado a descargar TODOS LOS ELEMENTOS DE MEDIOS. Para mi cliente en un T1 lento, esto se cerró mientras descargaba los artículos TODO EL MEDIO Y SUBIDO A ESTE POSTE juntos.

Recibí ayuda del gran Sewpafly que desarrolla el Editor de miniaturas de publicaciones . compartió una gran pieza de JS que evita la carga de TODOS LOS ARTÍCULOS DE MEDIOS y la obliga a cargar solo las imágenes "SUBIDAS 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: enlace

Lo coloqué en un archivo JS y lo llamé en functions.php con los admin_enqueue_scripts. Vea GIST arriba para PHP y JS.

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

Debo tener en cuenta que acabo de descubrir que el visor utiliza por defecto imágenes de tamaño MEDIO que había deshabilitado (configurado 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.

    
respondido por el dave 16.05.2013 - 03:54
4

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

1) Abre un borrador de publicación.

2) Haga clic en el botón Add Media . Espera a que se cargue la función jQuery.

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

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

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

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

EDITAR: ¿Alguien puede, por favor, dejar que toscho se entere de esto? Puede hacer esto 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 ...

EDIT 2 : si desea evitar este problema desesperadamente, 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.

    
respondido por el Christine Cooper 15.12.2012 - 17:28
2

Lo principal que no me gustó de la mayoría de estas soluciones es que estaba parpadeando en muchas pantallas, y si hace clic en Imagen destacada volverá a mostrar todas las imágenes. Después de algunas búsquedas, 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 de forma permanente la biblioteca de medios para que solo muestre "Cargado en esta publicación", incluso si intentas cambiar la vista, lo que significa que no hay parpadeo.

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

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
}
    
respondido por el Howdy_McGee 04.04.2014 - 19:34
2

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

    
respondido por el numediaweb 30.05.2015 - 18:03
0

Estas son mis soluciones para establecer dateFilter en el mes actual, aunque dispara 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);
  }
})
    
respondido por el Eilluj 22.03.2016 - 14:44

Lea otras preguntas en las etiquetas