ไลบรารีสื่อ - จำกัด รูปภาพสำหรับประเภทโพสต์ที่กำหนดเอง


10

มี wordpress magic / plugin บางอย่างที่จะทำให้ไลบรารีสื่อแสดงเฉพาะรูปภาพที่อัปโหลดไปยังประเภทโพสต์ที่กำหนดเองหรือไม่? ฉันมีประเภทโพสต์ที่กำหนดเองที่เรียกว่า "ศิลปิน" ฉันต้องการเมื่อผู้ดูแลระบบคลิกเพื่ออัปโหลด / แนบภาพที่ป๊อปอัพไลบรารีสื่อแสดงเฉพาะภาพที่อัปโหลดไปยังประเภทที่กำหนดเองของศิลปินไม่ใช่ไซต์ทั้งหมด

ฉันใช้ปลั๊กอิน ACF สำหรับจัดการฟิลด์ที่กำหนดเองและโพสต์ประเภท UI ที่กำหนดเอง เป็นไปได้ไหม


ให้ฉันตรวจสอบว่าฉันเข้าใจถูกต้องหรือไม่ ... ดังนั้นคุณต้องการเปลี่ยนป๊อปอัพไลบรารีสื่อในลักษณะที่แสดงเฉพาะภาพที่อัปโหลดไปยัง CPT เฉพาะถ้าคุณเปิดในขณะที่แก้ไข CPT นี้ และควรทำงานเหมือนเดิมทุกครั้งเมื่อคุณแก้ไขประเภทโพสต์อื่น
Krzysiek Dróżdż

บริบท / เหตุผลเบื้องหลังการทำสิ่งนี้คืออะไร? คุณกำลังพยายามใช้เครื่องมือเลือกศิลปินหรือไม่
Tom J Nowell

1
กรณีการใช้งานในกรณีของฉันเป็นเว็บไซต์ WordPress ขนาดใหญ่ที่ทุกคนไม่ได้แก้ไขโพสต์ประเภทเดียวกัน (และมีประโยชน์มาก) เพื่อแสดงการอัปโหลดไฟล์ที่เกี่ยวข้องล่าสุดซึ่งตรงข้ามกับการอัปโหลดจากทั่วไซต์เพื่อให้สามารถเลือกไฟล์ที่จำเป็นต้องนำกลับมาใช้ใหม่ได้อย่างง่ายดาย (ฉันไม่ได้ถามคำถามนี้ แต่แรกเพิ่มความโปรดปรานฉันพยายามทำสิ่งที่ Krzysiek อธิบาย (ขอบคุณสำหรับคำตอบฉันจะลอง))
guidod

คำตอบ:


9

ฉันไม่แน่ใจ 100% ว่าปัญหาของคุณถูกต้องหรือไม่ แต่ ... บางทีนี่อาจช่วยคุณได้ ...

Media uploader ได้รับไฟล์แนบที่ใช้งานง่ายWP_Queryดังนั้นคุณสามารถใช้ตัวกรองจำนวนมากเพื่อแก้ไขเนื้อหาได้

ปัญหาเดียวคือคุณไม่สามารถค้นหาโพสต์ด้วย CPT เฉพาะในฐานะผู้ปกครองโดยใช้WP_Queryอาร์กิวเมนต์ ... ดังนั้นเราจะต้องใช้posts_whereและposts_joinกรอง

ajax_query_attachments_argsเพื่อให้แน่ใจว่าเราจะเปลี่ยนแบบสอบถามเพียงสื่ออัปโหลดเราจะใช้

และนี่คือลักษณะเมื่อรวมกัน:

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

เมื่อคุณเปิดกล่องโต้ตอบเครื่องมืออัปโหลดสื่อขณะแก้ไขโพสต์ (โพสต์ / หน้า / CPT) คุณจะเห็นเฉพาะภาพที่แนบกับประเภทโพสต์เฉพาะนี้

หากคุณต้องการให้โพสต์หนึ่งประเภทเฉพาะ (สมมติว่าหน้าเว็บ) คุณจะต้องเปลี่ยนเงื่อนไขในการmy_posts_whereทำงานดังนี้:

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

ขอบคุณสำหรับความคิดเห็นที่เป็นประโยชน์ของคุณฉันได้ลบคำตอบเพื่อไม่ให้ใครสับสน +1 กับคุณ
jackreichert

0

แสดงเฉพาะภาพคุณสมบัติเมื่อแก้ไขภาพเด่น

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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.