Altera a visualização padrão da Biblioteca de Mídia no 3.5?

33

Ao inserir mídia em uma postagem, existe uma maneira de alterar a visualização padrão da Biblioteca de mídia de "Todos os itens de mídia" para "Enviado para esta postagem"?

Existeoutrothreademqueestaquestãofoiextraídade: Como gerenciar relacionamentos de apego

    
por div 14.12.2012 / 14:23
fonte

6 respostas

22

Ocorreram dois pequenos erros na minha resposta anterior:

  1. Esqueci de acionar o evento change para o pai.
  2. Liguei para a função em todas as chamadas AJAX, impossibilitando outras seleções.

Aqui está o código fixo:

<?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
}
    
por fuxia 15.12.2012 / 15:58
fonte
13

O único problema com o JS acima é que ele alterna a caixa de seleção para acionar a alteração depois que a página é carregada e depois de já ter começado o download de TODOS OS ITENS DE MÍDIA. Para meu cliente em um T1 lento, isso bloqueou as coisas, pois baixou os itens ALL MEDIA TIMES e UPLOADED TO THIS POST juntos.

Eu tive uma ajuda da grande Sewpafly que desenvolveu o Editor de post miniatura . ele compartilhou uma grande parte do JS que previne a carga de TODOS OS ITENS DE MÍDIA e força-a a carregar apenas imagens "UPLOADED TO ES POST" por padrão.

O código

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

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

O mesmo código no GitHub: enlace

Eu coloquei isso em um arquivo JS e o chamei em functions.php com o admin_enqueue_scripts. Veja GIST acima para o PHP e JS.

Funciona de forma brilhante. Espero que o pessoal do wordpress conserte isso em uma atualização futura, mas por enquanto Sewpafly tem a melhor solução que eu Encontrei. Mais uma vez obrigado amigo.

Devo observar que acabei de descobrir que o visualizador usa como padrão as imagens de tamanho MÉDIO que eu havia desativado (definido como 0,0), pois não estava usando e impedindo o inchaço. Quando o tamanho médio não está disponível, o wordpress carrega a imagem de tamanho COMPLETO. Eu já dei em habilitado o tamanho médio.

    
por dave 16.05.2013 / 03:54
fonte
4

@toscho Ah, eu encontrei um bug no seu código. Por favor, descubra comigo. Faça o seguinte exato para replicar o problema:

1) Abra um rascunho.

2) Clique no botão Add Media . Aguarde a função jQuery para carregar.

3) À sua esquerda, clique no link Set Featured Image .

4) Agora feche a janela pop-up Mídia e, na página de edição de postagens, clique no link Set featured image na barra lateral direita.

5) Você verá que a função jQuery não funcionará.

No entanto, se você tivesse clicado no link Set featured image primeiro no carregamento de pós-edição, a função funcionaria. Você pode replicar esse problema e possivelmente encontrar uma solução? Desculpe novamente por postar isso como uma resposta, mas esta plataforma não me oferece uma opção melhor atualmente.

EDIT: Alguém pode, por favor, deixar toscho saber sobre isso. Você pode fazer isso adicionando um comentário à sua resposta, o que acredito que deveria lhe dar uma notificação. Não posso escrever comentários porque não tenho reputação suficiente ...

EDIT 2 : Se você quiser evitar desesperadamente esse problema, pode remover o link "Definir imagem em destaque" no pop-up e forçar o usuário a usar o link da barra lateral (como versões do WP anteriores a 3,5). Use este filtro que foi introduzido no 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 eu disse, esta é uma correção desesperada até que haja uma solução postada para o código principal.

    
por Christine Cooper 15.12.2012 / 17:28
fonte
2

A principal coisa que eu não gostei da maioria dessas soluções é que ela estava piscando em muitas telas, e se você clicasse em Imagem em destaque , ele voltaria a exibir todas as imagens. Depois de algumas pesquisas, eu acho que encontrei uma solução permanente (Graças a Ünsal Korkmaz ) que parece resolver esses problemas. O 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 define permanentemente a biblioteca de mídia para mostrar apenas "Enviado para este post", mesmo se você tentar alterar a exibição, o que significa que não há piscadas.

Eu adicionei este código para acompanhá-lo para remover completamente a caixa de seleção:

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

As novas versões do wordpress usam uma abordagem diferente ( Backbonejs ) para o usuário de mídia; Verifique o código de este plugin , pois ele funciona para novas versões do WordPress.

    
por numediaweb 30.05.2015 / 18:03
fonte
0

Estas são as minhas soluções para definir dateFilter para o mês atual, embora ele ative o AJAX duas vezes.

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
    
por Eilluj 22.03.2016 / 14:44
fonte