Pustaka media - Batasi gambar untuk jenis posting khusus

10

Apakah ada sulap / plugin wordpress yang akan membuat perpustakaan media hanya menampilkan gambar yang diunggah ke jenis posting khusus tertentu? Saya memiliki jenis posting khusus yang disebut "artis", saya ingin, ketika admin mengklik untuk mengunggah / melampirkan gambar, bahwa popup perpustakaan media hanya menampilkan gambar yang telah diunggah ke jenis kustom seniman, dan bukan seluruh situs.

Saya menggunakan plugin ACF untuk menangani bidang khusus, dan jenis posting khusus ui. Apakah ini mungkin?

BillyMedia
sumber
Biarkan saya memeriksa apakah saya memahaminya dengan benar ... Jadi, Anda ingin mengubah popup perpustakaan media sedemikian rupa sehingga hanya menampilkan gambar yang diunggah ke CPT tertentu jika Anda membukanya saat mengedit CPT ini. Dan itu harus berfungsi seperti biasa ketika Anda mengedit jenis posting lainnya?
Krzysiek Dróżdż
Apa konteks / alasan di balik melakukan ini? Apakah Anda mencoba menerapkan pemilih artis?
Tom J Nowell
1
Kasus penggunaan dalam kasus saya adalah situs WordPress besar di mana tidak semua orang mengedit jenis posting yang sama. Jauh lebih rapi (dan bermanfaat) untuk menampilkan unggahan file terkait terbaru dan bukan unggahan dari seluruh situs, sehingga file yang perlu digunakan kembali dapat dengan mudah dipilih. (Awalnya saya tidak menanyakan pertanyaan ini tetapi menambahkan karunia. Saya mencoba melakukan persis seperti yang dijelaskan Krzysiek (terima kasih atas jawabannya, saya akan mencobanya))
guidod

Jawaban:

9

Saya tidak 100% yakin jika saya menyelesaikan masalah Anda dengan benar, tapi ... Mungkin ini akan membantu Anda ...

Pengunggah media mendapat lampiran dengan mudah WP_Query, sehingga Anda dapat menggunakan banyak filter untuk mengubah kontennya.

Satu-satunya masalah adalah Anda tidak dapat meminta posting dengan CPT tertentu sebagai induk menggunakan WP_Queryargumen ... Jadi, kita harus menggunakan posts_wheredan posts_joinmemfilter.

Untuk memastikan, bahwa kami hanya akan mengubah kueri pengunggah media, kami akan gunakan ajax_query_attachments_args.

Dan inilah tampilannya, saat digabungkan:

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

Saat Anda membuka dialog pengunggah media saat mengedit posting (post / halaman / CPT), Anda hanya akan melihat gambar yang dilampirkan ke jenis posting khusus ini.

Jika Anda ingin hanya berfungsi untuk satu jenis posting tertentu (katakanlah halaman), Anda harus mengubah kondisi dalam my_posts_wherefungsi seperti:

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;
}
Krzysiek Dróżdż
sumber
Terima kasih atas komentar Anda yang bermanfaat, saya menghapus jawaban saya agar tidak membingungkan siapa pun. Memberi +1 pada Anda.
jackreichert
0

Hanya tampilkan gambar properti saat mengedit gambar unggulan

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