Alterar a visualização padrão da Biblioteca de mídia em 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 "Carregado nesta postagem"?

Captura de tela emprestada

Há outro segmento de onde essa pergunta foi extraída: Como gerenciar relacionamentos de anexo


Você já tentou desligar todos os outros plugins, voltar ao tema padrão e ativar o do toscho? Pode ser um conflito de JS.
kaiser

Respostas:


22

Houve dois pequenos erros na minha resposta anterior:

  1. Esqueci de acionar o changeevento para os pais.
  2. Eu chamei 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
}

Muito obrigado, toscho! <br> O código do plugin que você soltou aqui funciona como um encanto para mim agora! (seria bom se alguém pudesse converter essa "resposta" em um comentário e definir o status como respondido)
div

Você é o único que pode marcar a resposta . Você precisa usar a conta usada para perguntar. Mesclei as duas contas. Agora você deve marcar a marca de seleção. :)
fuxia

3
Este código muito elegante funciona quando você clica no Add Mediabotão, mas não quando você clica no Set featured image. Existe uma maneira de fazê-lo funcionar lá também?
Christine Cooper

Também funciona no meu sistema para imagens em destaque.
fuxia

1
Isso tem um problema em potencial, parece que você está selecionando tudo o que tem valor = carregado. Além disso, se você quiser adicionar javascript à inicialização de cada remetente, wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});seria mais apropriado.
NoBugs

13

O único problema com o JS acima é que ele alterna a caixa de seleção para acionar a alteração após o carregamento da página e após o início do download de TODOS OS ITENS DE MÍDIA. Para o meu cliente em um T1 lento, isso bloqueou tudo, pois ele baixava os itens ALL MEDIA TIMES e UPLOADED TO THIS POST juntos.

Tive alguma ajuda do grande Sewpafly que desenvolve o Plug-in do Post Thumbnail Editor . ele compartilhou uma grande parte de JS que impede o carregamento de TODOS OS ITENS DE MÍDIA e o força a carregar apenas imagens "CARREGADO PARA ESTE 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: https://gist.github.com/fishnyc22/5593693

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

Funciona de forma brilhante. Espero que o pessoal do wordpress conserte isso em uma atualização futura, mas por enquanto o Sewpafly tem a melhor solução que encontrei. Obrigado novamente 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 em tamanho COMPLETO. Desde então, cedeu ao tamanho médio.


extremamente útil - não se pode apenas limitar o número de imagens exibidas na biblioteca de mídia com algum tipo de gancho?
Inato 15/10

Pessoalmente, eu também gostaria de acrescentar este CSS, que vai esconder o menu suspenso media: pastebin.com/1dP6SR4g
Howdy_McGee

1
Infelizmente, esta solução sofre de um grande problema. Faça o seguinte: 1. Abra uma postagem na tela de pós-edição. 2. Clique no link "Definir imagem em destaque" (antes de clicar no botão Adicionar mídia). 3. O código funciona bem até agora. Agora, feche a janela e clique no botão Adicionar mídia. Você verá que a opção "Todas as mídias" está selecionada, mas está exibindo as que foram enviadas. Para alternar para todas as imagens, você precisará alternar para o upload e, em seguida, voltar para todas as mídias. Alguém tem uma solução para esse problema? Obrigado por isso, no entanto.
Christine Cooper

4

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

1) Abra um rascunho da postagem.

2) Clique no Add Mediabotão. Aguarde o carregamento da função jQuery.

3) À sua esquerda, clique no Set Featured Imagelink.

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

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

No entanto, se você clicasse no Set featured imagelink primeiro no carregamento 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 resposta, mas esta plataforma não oferece uma opção melhor atualmente.

Edição: alguém pode por favor avise toscho sobre isso. Você pode fazer isso adicionando um comentário à resposta dele, que acredito que deve dar uma notificação a ele. Não consigo escrever comentários, pois não tenho reputação suficiente ...

EDIÇÃO 2 : Se você deseja evitar esse problema desesperadamente, 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 as versões WP anteriores à 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, essa é uma correção desesperada até que haja uma solução postada para o código principal.


Estou ciente disso, só não tenho tempo para estender o plugin.
fuxia

Entendo que, se você encontrar um tempo no futuro próximo para estendê-lo, todos ficaremos agradecidos.
Christine Cooper

Eu atualizei esta resposta com um "resumo" para os desesperados. toscho você pode adicionar isso à sua resposta se desejar ...
Christine Cooper

2

A principal coisa que eu não gostei na maioria dessas soluções é que ela estava piscando em muitas telas e, se você clicar em Imagem em destaque , voltará a exibir todas as imagens. Após algumas pesquisas, 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 "Carregado para esta postagem", mesmo se você tentar alterar a exibição, o que significa que não pisca.

Adicionei este código para acompanhá-lo e 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
}

2

As novas versões do wordpress usam uma abordagem diferente ( Backbonejs avançados ) para o uploader de mídia; Verifique o código deste plugin, pois ele funciona para novas versões do WordPress.


2
Teria sido bom se você realmente compartilhou o código - não apenas um link.
kaiser

0

Esta é a minha solução para definir dateFiltero mês atual, apesar de ativar 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);
  }
})
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.