Biblioteca de mídia - Limitar imagens ao tipo de postagem personalizada


10

Existe algum plugin / mágica para wordpress que fará com que a biblioteca de mídia mostre apenas imagens que foram enviadas para um tipo de postagem personalizado específico? Eu tenho um tipo de postagem personalizado chamado "artistas". Quero que, quando o administrador clique para fazer upload / anexar uma imagem, o pop-up da biblioteca de mídia mostre apenas imagens que foram enviadas para o tipo personalizado do artista e não o site inteiro.

Eu uso o plug-in ACF para manipular campos personalizados e tipos de mensagens personalizadas ui. Isso é possível?


Deixe-me verificar se eu entendi corretamente ... Então, você deseja alterar o pop-up da biblioteca de mídia de forma que mostre apenas as imagens que foram enviadas para um CPT específico se você o abrir durante a edição deste CPT. E deve funcionar como sempre quando você está editando outros tipos de postagem?
Krzysiek Dróżdż

Qual é o contexto / raciocínio por trás disso? Você está tentando implementar um seletor de artistas?
Tom J Nowell

11
O caso de uso no meu caso é um site WordPress grande, onde nem todo mundo edita os mesmos tipos de postagem. É muito mais organizado (e útil) mostrar os uploads de arquivos relacionados mais recentes, em oposição aos uploads de todo o site, para que os arquivos que precisam ser reutilizados possam ser facilmente selecionados. (. Eu não pedi esta pergunta originalmente mas acrescentou a recompensa que eu estou tentando fazer exatamente o que Krzysiek descrito (obrigado pela resposta, eu vou tentar))
guidod

Respostas:


9

Não tenho 100% de certeza se o seu problema está correto, mas ... Talvez isso ajude você ...

O Uploader de mídia obtém anexos de forma simples WP_Query, para que você possa usar muitos filtros para modificar seu conteúdo.

O único problema é que você não pode consultar postagens com CPT específico como pai usando WP_Queryargumentos ... Portanto, teremos que usar posts_wheree posts_joinfiltrar.

Para ter certeza, alteraremos apenas a consulta do upload de mídia, usaremos ajax_query_attachments_args.

E é assim que parece, quando combinados:

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post ) {
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

function my_posts_join($join) {
    global $wpdb;

    $join .= " LEFT JOIN {$wpdb->posts} as my_post_parent ON ({$wpdb->posts}.post_parent = my_post_parent.ID) ";

    return $join;
}


function my_bind_media_uploader_special_filters($query) {
    add_filter('posts_where', 'my_posts_where');
    add_filter('posts_join', 'my_posts_join');

    return $query;
}
add_filter('ajax_query_attachments_args', 'my_bind_media_uploader_special_filters');

Ao abrir a caixa de diálogo do carregador de mídia durante a edição da postagem (postagem / página / CPT), você verá apenas imagens anexadas a esse tipo de postagem específico.

Se você deseja que ele funcione apenas para um tipo de postagem específico (digamos, páginas), será necessário alterar a condição na my_posts_wherefunção da seguinte maneira:

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post && 'page' == $post->post_type ) {  // you can change 'page' to any other post type
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

Obrigado pelo seu comentário útil, excluí minha resposta para não confundir ninguém. +1 no seu.
jackreichert

0

Exiba apenas as imagens da propriedade ao editar a imagem em destaque

function my_bind_media_uploader_special_filters($query) 
{

    add_filter('posts_where', 'my_posts_where');
    return $query;
}

add_filter('ajax_query_attachments_args','my_bind_media_uploader_special_filters');

function my_posts_where ($where) 
{

    global $wpdb;
    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];
        $post = get_post($post_id);
        if ( $post && 'property' == $post->post_type) {
            $where .= $wpdb->prepare(" AND id in (select distinct meta_value from 
            wpdb_postmeta where meta_key='fave_property_images' and post_id = $post_id)", 
            $post->post_type);
        }
    }
    return $where;
}
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.