Medya kitaplığı - Görüntüleri özel yayın türüyle sınırlandırın


10

Medya kitaplığının yalnızca belirli bir özel gönderi türüne yüklenen görüntüleri göstermesini sağlayacak bazı wordpress büyü / eklentisi var mı? Yönetici bir resim yüklemek / eklemek için tıkladığında, medya kitaplığı açılır penceresinin tüm siteye değil, yalnızca sanatçıların özel türüne yüklenmiş resimleri göstermesini istiyorum.

ACF eklentisini özel alanları ve özel yazı türlerini işlemek için kullanıyorum. Mümkün mü?


Doğru anladığımı kontrol edeyim ... Medya kitaplığı açılır penceresini, yalnızca bu CPT'yi düzenlerken açarsanız belirli CPT'ye yüklenen görüntüleri gösterecek şekilde değiştirmek istiyorsunuz. Ve diğer yazı türlerini düzenlerken her zamanki gibi mi çalışmalıdır?
Krzysiek Dróżdż

Bunu yapmanın arkasındaki bağlam / mantık nedir? Bir sanatçı seçici uygulamaya mı çalışıyorsunuz?
Tom J Nowell

1
Benim durumumdaki kullanım durumu, herkesin aynı yazı türlerini düzenlemediği büyük bir WordPress sitesidir. En son ilgili dosya yüklemelerini sitenin her yerinden yüklemelerin aksine göstermek çok daha düzenli (ve kullanışlı), böylece yeniden kullanılması gereken dosyaların kolayca seçilebilmesi sağlandı. (Bu soruyu aslen sormadım ama ödül ekledim. Krzysiek'in tanımladığı şeyi tam olarak yapmaya çalışıyorum (cevap için teşekkürler, deneyeceğim))
guidod

Yanıtlar:


9

Sorununuzu doğru çözersem% 100 emin değilim, ama ... Belki bu size yardımcı olacaktır ...

Medya yükleyici ekleri basit bir şekilde alır WP_Query, böylece içeriğini değiştirmek için birçok filtre kullanabilirsiniz.

Tek sorun, WP_Querybağımsız CPT'ye sahip yayınları bağımsız değişken olarak üst öğe olarak sorgulayamamanızdır ... Bu nedenle, kullanmak posts_whereve posts_joinfiltrelemek zorunda kalacağız .

Yalnızca medya yükleyicisinin sorgusunu değiştireceğimizden emin olmak için kullanacağız ajax_query_attachments_args.

Ve birleştirildiğinde şöyle görünüyor:

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

Gönderiyi düzenlerken medya yükleyici iletişim kutusunu açtığınızda (gönderi / sayfa / CPT), yalnızca bu gönderi türüne iliştirilmiş resimleri görürsünüz.

Yalnızca belirli bir yazı türü için çalışmasını istiyorsanız (diyelim sayfalar), my_posts_whereişlevdeki koşulu şu şekilde değiştirmeniz gerekir:

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

Yardımcı yorumun için teşekkürler, kimseyi karıştırmamak için cevabımı sildim. Sizinkinde +1.
jackreichert

0

Öne çıkan resmi düzenlerken yalnızca mülkün resimlerini görüntüle

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.