Libreria multimediale: limita le immagini al tipo di post personalizzato


10

C'è qualche magia / plugin di wordpress che farà in modo che la libreria multimediale mostri solo le immagini che sono state caricate su uno specifico tipo di post personalizzato? Ho un tipo di post personalizzato chiamato "artisti", quando l'amministratore fa clic per caricare / allegare un'immagine, il popup della libreria multimediale mostra solo le immagini che sono state caricate sul tipo personalizzato di artisti e non l'intero sito.

Uso il plug-in ACF per gestire i campi personalizzati e i tipi di messaggi personalizzati dell'interfaccia utente. È possibile?


Fammi controllare se lo capisco correttamente ... Quindi vuoi cambiare il popup della libreria multimediale in modo tale che mostri solo le immagini che sono state caricate su CPT specifico se lo apri durante la modifica di questo CPT. E dovrebbe funzionare come sempre quando si modificano altri tipi di post?
Krzysiek Dróżdż

Qual è il contesto / ragionamento alla base di questo? Stai cercando di implementare una selezione artisti?
Tom J Nowell

1
Il caso d'uso nel mio caso è un grande sito WordPress in cui non tutti modificano gli stessi tipi di post. È molto più ordinato (e utile) mostrare i caricamenti di file correlati più recenti rispetto ai caricamenti da tutto il sito, in modo che i file che devono essere riutilizzati possano essere facilmente raccolti. (All'inizio non avevo posto questa domanda, ma ho aggiunto la generosità. Sto provando a fare esattamente quello che Krzysiek ha descritto (grazie per la risposta, la proverò))
guidod

Risposte:


9

Non sono sicuro al 100% se risolvo il tuo problema, ma ... Forse questo ti aiuterà ...

L'uploader multimediale ottiene allegati in modo semplice WP_Query, quindi puoi utilizzare molti filtri per modificarne i contenuti.

L'unico problema è che non puoi interrogare post con CPT specifico come genitore usando WP_Queryargomenti ... Quindi, dovremo usare posts_wheree posts_joinfiltrare.

Per essere sicuri, cambieremo solo la query del caricatore multimediale, che useremo ajax_query_attachments_args.

Ed è così che appare, quando combinato:

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');

Quando apri la finestra di dialogo dell'uploader multimediale durante la modifica di un post (post / pagina / CPT), vedrai solo le immagini allegate a questo specifico tipo di post.

Se desideri che funzioni solo per un tipo di post specifico (diciamo pagine), dovrai modificare le condizioni in my_posts_wherefunzione in questo modo:

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;
}

Grazie per il tuo utile commento, ho cancellato la mia risposta per non confondere nessuno. +1 sul tuo.
jackreichert,

0

Visualizza solo le immagini della proprietà durante la modifica dell'immagine in primo piano

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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.