मीडिया लाइब्रेरी - कस्टम पोस्ट प्रकार के लिए छवियों को सीमित करें


10

क्या कुछ वर्डप्रेस जादू / प्लगइन है जो मीडिया लाइब्रेरी को केवल उन छवियों को दिखाएगा जो एक विशिष्ट कस्टम पोस्ट प्रकार पर अपलोड किए गए थे? मेरे पास एक कस्टम पोस्ट प्रकार है जिसे "कलाकार" कहा जाता है, मैं चाहता हूं, जब व्यवस्थापक एक छवि अपलोड / संलग्न करने के लिए क्लिक करें, कि मीडिया लाइब्रेरी पॉपअप केवल उन छवियों को दिखाती है जो कलाकारों को कस्टम प्रकार पर अपलोड की गई हैं, और पूरी साइट पर नहीं।

मैं कस्टम फ़ील्ड और कस्टम पोस्ट प्रकार ui से निपटने के लिए ACF प्लगइन का उपयोग करता हूं। क्या यह संभव है?


मुझे यह समझने दें कि क्या मैं इसे सही तरीके से समझता हूं ... इसलिए आप मीडिया लाइब्रेरी पॉपअप को इस तरह से बदलना चाहते हैं कि यह केवल उन छवियों को दिखाता है जो इस सीपीटी को संपादित करते समय इसे खोलते हैं तो विशिष्ट सीपीटी पर अपलोड किए गए थे। और यह हमेशा की तरह काम करना चाहिए जब आप अन्य पोस्ट प्रकार संपादित कर रहे हैं?
Krzysiek Dróżdż

ऐसा करने के पीछे क्या संदर्भ / तर्क है? क्या आप एक कलाकार पिकर को लागू करने की कोशिश कर रहे हैं?
टॉम जे नोवेल

1
मेरे मामले में उपयोग का मामला एक बड़ी वर्डप्रेस साइट है जहां हर कोई एक ही प्रकार के पोस्ट को संपादित नहीं करता है। यह हाल ही में संबंधित फ़ाइल अपलोड को दिखाने के लिए बहुत अधिक ख़राब (और उपयोगी) है, जो कि सभी साइट से अपलोड के विपरीत है, ताकि जिन फ़ाइलों का पुन: उपयोग करने की आवश्यकता है उन्हें आसानी से उठाया जा सके। (मैंने यह सवाल मूल रूप से नहीं पूछा, लेकिन इनाम में जोड़ा। मैं वही करने की कोशिश कर रहा हूं जो क्रिस्किक ने वर्णित किया है (उत्तर के लिए धन्यवाद, मैं इसे
आज़माऊंगा

जवाबों:


9

मैं 100% निश्चित नहीं हूं कि मुझे आपकी समस्या सही लगे, लेकिन ... शायद यह आपकी मदद करेगा ...

मीडिया अपलोडर को सरल के साथ अटैचमेंट मिलते हैं 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');

जब आप पोस्ट (पोस्ट / पेज / सीपीटी) को संपादित करते समय मीडिया अपलोडर संवाद खोलते हैं, तो आपको इस विशिष्ट पोस्ट प्रकार से जुड़ी केवल छवियां दिखाई देंगी।

यदि आप इसे केवल एक विशिष्ट पोस्ट प्रकार के लिए काम करना चाहते हैं (जैसे कि पृष्ठ कहते हैं), तो आपको 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।
जैकरिचर्ट '

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;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.