मैं 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;
}